Ik heb een probleem met een stukje C code. Ik ben niet zo heel erg goed met C, al lijkt me niet zo'n moeilijk probleem.
De code is alsvolgt:
het programma 'settings' is een apparte applicatie. Bovenstaande applicatie moet twee keer dat programma 'settings' uitvoeren. Door 'settings -g username' uit te voeren, krijg je als result een opgeslagen username terug.
Maar het werkt dus niet. De output is twee keer de waarde van password in plaats van de waarde van username en password. Gcc geeft als compilatie waarschuwing:
Het lijkt me dat het komt omdat die functie een pointer returned. Maar hoe los ik dit dan op dat het wel werkt? En wat is de precieze oorzaak?
De code is alsvolgt:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> char *get_setting(char *setting) { FILE *fp; char line[255]; char command[255]; sprintf (command, "settings -g %s", setting); fp = popen(command, "r"); fgets (line, sizeof line, fp); if (line[strlen(line) - 1] == "\n") line[strlen(line) -1] = "\0"; return line; } int main (int argc, char *argv[]) { char *username, *password; username = get_setting("username"); password = get_setting("password"); printf ("u = %s , p = %s \n", username, password); return 0; } |
het programma 'settings' is een apparte applicatie. Bovenstaande applicatie moet twee keer dat programma 'settings' uitvoeren. Door 'settings -g username' uit te voeren, krijg je als result een opgeslagen username terug.
Maar het werkt dus niet. De output is twee keer de waarde van password in plaats van de waarde van username en password. Gcc geeft als compilatie waarschuwing:
code:
1
2
3
4
| test.c: In function ‘get_setting’: test.c:17: warning: comparison between pointer and integer test.c:18: warning: assignment makes integer from pointer without a cast test.c:20: warning: function returns address of local variable |
Het lijkt me dat het komt omdat die functie een pointer returned. Maar hoe los ik dit dan op dat het wel werkt? En wat is de precieze oorzaak?
[ Voor 0% gewijzigd door moto-moi op 28-09-2006 13:05 ]