c - 当我从函数中更改它时,为什么 `src` 没有更改?

标签 c arrays string pointers pass-by-value

我的程序:

#include<stdio.h>
#include<conio.h>

char* str(char*src);\\declared as function global
main()
{
    char src[40]="hello";
    clrscr();
    puts(src);
    str(src);\\ function called
    puts(src);\\does not put changed string?
    getch();
    return 0;
}

char* str( char *src)
{
    src="readers";\\changing my source string<--is it changes???
    return src;\\returning source sting
}

输出:

hello
hello

为什么 src 没有成为“读者”

最佳答案

在您的代码中,src="readers"; 是错误的。你必须像这样尝试

strcpy(src, "readers");

原因是,C在传递函数参数时采用了传值方式。所以,这里的 src 是按值传递的,所以你不能从函数内部更改 src 。您可以从函数更改 *src。因此,要更改 src 指向的内容,您必须使用 strcpy()

此外,正如 @coolguy 先生所提到的,您没有使用 str() 的返回值,因此 return声明在这里没有影响。

关于c - 当我从函数中更改它时,为什么 `src` 没有更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33471904/

相关文章:

c - 当套接字关闭时,UDP 套接字上的选择不会结束 - 我做错了什么?

c++ - 是什么阻止了 C++ 成为 C 的严格超集?

java - 检查以逗号分隔的字符串是否至少包含 1 个有效整数的最快方法?

c++ - 解释一个字符串,因为它引用程序中的变量。 Geant4台

c - 如何将 char 字符串从另一个函数复制到 main?

c - 从字节中检索位

javascript通过从另一个集合中查找来更新mongodb记录多个字段

java - 如何修复我的代码以提供正确的输出而不是不提供任何输出?

c++ - 扫描数字数组并计算范围 (0 - 24)(25 - 49) 等之间的数字的算法

python - 有条件地连接具有条件的字符串列表