Используя printf
для печати "\4unix\5lancs\2ac\2uk\0"
вместо печати в виде ♦unix♣lancs☻ac☻uk
я получаю мусор (♫ ,►E¦§Qh ↕
).
Я не могу найти объяснения этому; Я использую следующий метод для токенизации строки:
/**
* Encode the passed string into a string as defined in the RFC.
*/
char * encodeString(char *string) {
char stringCopy[128];
char encodedString[128] = "";
char *token;
/* We copy the passed string as strtok mutates its argument. */
strcpy(stringCopy, string);
/* We tokenise the string on periods. */
token = strtok(stringCopy, ".");
while (token != NULL) {
char encodedToken[128] = "";
/* Encode the token. */
encodedToken[0] = (char) strlen(token);
strcat(encodedToken, token);
/* Add the encodedString token to the encodedString string. */
strcat(encodedString, encodedToken);
/* Prepare for the next iteration. */
token = strtok(NULL, ".");
}
/* A null character is appended already to the encoded string. */
return encodedString;
}
И следующий код в моем драйвере для печати результата при токенизации "unix.lancs.ac.uk"
:
int main(int argc, char *argv[]) {
char *foo = "unix.lancs.ac.uk";
char *bar = encodeString(foo);
printf("%s\n", bar);
return 0;
}
Если я добавлю printf
для печати encodedString
в конце метода encodeString
, я не получу распечатанный мусор (скорее, ♦unix♣lancs☻ac☻uk
дважды).
(При отладке я замечаю, что фактическое содержимое памяти изменяется.)
Может кто-нибудь объяснить мне это явление?