我有一個變量'jmp_code',聲明爲char *。當我運行以下命令不同的結果使用%c和循環與printf中的循環與%s以空值終止的字符串
printf("char by char, the code is '%c%c%c%c'\n", *jmp_code, *(jmp_code+1), *(jmp_code+2),*(jmp_code+3));
printf("printing the string, the code is '%s'\n", jmp_code);
我得到下面的結果
char by char, the code is '0,0,0, ,'
printing the string, the code is 'ö\├w≡F┴w'
我使用的代碼塊。這裏是我玩的示例代碼。
#include <stdio.h>
#include <string.h>
char * some_func(char * code);
char * some_func(char * code) {
char char_array[4];
strcpy(char_array, "000");
code = char_array;
return code;
}
int main (void) {
char * jmp_code = NULL;
jmp_code = some_func(jmp_code);
printf("char by char, the code is '%c,%c,%c,%c,'\n", *jmp_code, *(jmp_code+1), *(jmp_code+2),*(jmp_code+3));
printf("printing the string, the code is '%s'\n", jmp_code);
return 0;
}
我對此很困惑。任何幫助,將不勝感激。
感謝
我認爲這與jmp_code的內容有關。 'α'不是ASCII字符。 – wong2 2011-01-14 14:38:54
你的環境是什麼?你能粘貼完整的代碼嗎? – 2011-01-14 14:45:08
令人驚歎。 char_array在some_func()函數的堆棧上,您提供它並返回指針。據我所知,printf可以打印所有的東西。 嘗試在%c%c%c之前打印%s,您可能會有第二次打印的奇怪行爲... – 2011-01-14 15:29:31