c - C 函数中的奇怪行为,字符串未保留

标签 c string casting

我有这样的功能:

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/

相关文章:

c++ - 如何使用 Unicode 映射

java - "?="在正则表达式中做什么?

c - 错误 : assignment makes integer from pointer without a cast [-Werror] str1 = (unsigned char*)s1

c - 更快的算法来找出有多少数字不能被一组给定的数字整除

c - 使用 C 在文本文件中返回随机行的最佳方法是什么?

c - 在C中为字符串动态分配内存时,是否计算字符串char的\0结尾?

java - 将 int 转换为 String,然后使用 XOR 对其进行加密

c# - 从类型名称转换为类型作为字符串

c++ - 限制函数指针的转换

c++ - Remy源码(github)protobuf类编译错误