我有这样的功能:
int foo(void *val){
(char *)val="Long String";
return 0;
}
这个函数的调用方式如下:
char str[25];
foo(str);
printf("%s",str);
出于某种原因,我什么也没打印出来。这里有什么问题?
最佳答案
您实际上并没有像您认为的那样复制数据。您所做的只是更改参数值以指向不同的内存地址。该参数是按值传递的,因此对它的任何更改都不会反射(reflect)在调用代码中。对于您正在尝试的内容,您需要使用 strcpy()
或 strncpy()
代替,例如:
int foo(char *val)
{
strcpy(val, "Long String");
return 0;
}
或者:
int foo(char *val, int maxlen)
{
strncpy(val, "Long String", maxlen);
return 0;
}
关于c - C 函数中的奇怪行为,字符串未保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513012/