【发布时间】:2014-08-16 03:11:15
【问题描述】:
在这个程序中,我通过函数指针访问全局 char 数组,使用 char 指针中的地址逐个地址更改字符串值 对全局 char 数组有影响,但是当将字符串更改为整个字符串时,它对全局数组没有任何影响
#include <stdio.h>
#include <string.h>
void function(char *string);
char str[20] = "Hello"; // global char array
int main()
{
function(str);
return 0;
}
void function(char *string)
{
int i;
printf("%s\n",string);
printf("%s\n", str);
for(i = 0;i < strlen(string);i++)
string[i] = 'a';
printf("%s\n",string);
printf("%s\n", str);
string = "jhony";
printf("%s\n",string);
printf("%s\n",str); // here is the doubt
}
输出
Hello
Hello
aaaaa
aaaaa
jhony
aaaaa //how this supposed to print aaaaa even after we changed string into jhony
【问题讨论】:
-
您的问题是可以用来说明指针的经典示例。事实上,这是预期的行为,您的期望是错误的。为了覆盖数据,您必须使用
strcpy之类的东西。 -
为避免此类问题,请使用例如
std::string处理字符串。 -
@Alf,
c++可能包含在此处的错误中。所有迹象都表明这只是C。