我用sprintf(),以填補我的字符串,但是當我不這樣做,我發現了一些奇怪的事情,這名測試甚至可以是一個說法,我想調用函數時,它就像一個R值進行修改的VAR ,或者這裏是我沒注意到的地方,下面是我的代碼和輸出。sprintf()修改函數中的變量嗎?
謝謝。
#include <stdio.h>
#include <stdlib.h>
void Encap(char str[9])
{
printf("%s\n", str);
sprintf(str, "hi e");
printf("%s\n%p\n", str, &str);
}
int main()
{
char test[9] = "ABC";
printf("%s\n", test);
Encap(test);
printf("%s\n%p\n", test, &test);
system("pause");
return 0;
}
輸出
ABC
ABC
hi e
0061FF10
hi e
0061FF27
在你pronting變量'str',地址在另一個案件 - 'test'。不同的變量 - 不同的地址。 –
'&str'不是你可能期望的值......因爲'char str [9]'確實是'char * str'。 – Jarod42
數組作爲指針傳遞給一個函數;正如你演示的那樣,指針指向的內容可以被修改。這是基本的C理論(和實踐)。這裏不應該有任何意外。 –