Thread u.a. Adressierungsoperator (7 answers)
Opened by RPerl at 2007-10-27 19:18

RPerl
 2007-10-27 19:18
#101469 #101469
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hallo jungs,

erstmal danke fuer das klicken :)
ich hab mal wieder ein Problem mit C und eine Frage bzgl. C.


1. Frage: Warum brauch *ich* den Adressierungsoperator in dieser Situation:

Code: (dl )
sprintf(&str[0], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')", f[0], f[1], f[2], f[3]);


str sieht so aus:

Code: (dl )
1
2
3
[...]
char *str[1024];
[...]


Vielleicht weiss das ja hier jemand :)

2. Problem: Wieso geht das:

Code: (dl )
1
2
3
4
  sprintf(&str[0], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')\0", f[0], f[1], f[2], f[3]);
printf("%s\n", &str[0]);
sprintf(&str[1], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')", f[4], f[5], f[6], f[7]);
printf("%s\n", &str[1]);


Output: INSERT INTO data (v1, v2, v3, v4) VALUES ('aaa', 'bbb', 'ccc', 'ddd')
INSERT INTO data (v1, v2, v3, v4) VALUES ('eee', 'fff', 'ggg', 'hhh')

=> Erwartete Ausgabe.


Aber das hier nicht:

Code: (dl )
1
2
3
4
  sprintf(&str[0], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')\0", f[0], f[1], f[2], f[3]);
sprintf(&str[1], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')", f[4], f[5], f[6], f[7]);
printf("%s\n", &str[0]);
printf("%s\n", &str[1]);


Output: INSEINSERT INTO data (v1, v2, v3, v4) VALUES ('eee', 'fff', 'ggg', 'hhh') INSERT INTO data (v1, v2, v3, v4) VALUES ('eee', 'fff', 'ggg', 'hhh')

Hier werden offenbar die Statements ueberschrieben. Man siehts am fett markierten und an der Tatsache, das die Werte falsch sind. *g*

Wer Lust / Interesse hat, das hier zu beantworten, gerne. Aber bitte kein geflame wie mans aus manch anderen Foren kennt. :)

Vielen Dank, schoenen Samstag

gruß

rperl

// Nachtrag: So gehts uebrigens:

Code: (dl )
1
2
3
  sprintf(&str[0], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')\0", f[0], f[1], f[2], f[3]);
sprintf(&str[25], "INSERT INTO data (v1, v2, v3, v4) VALUES ('%s', '%s', '%s', '%s')\0", f[4], f[5], f[6], f[7]);
printf("%s", &str[25])


Seltsam *g*

View full thread u.a. Adressierungsoperator