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/

相关文章:

php - 如何计算特定级别选定用户下的节点数?

c - 通过 TCP 端口发送多条消息

c - 预期表达式错误为 `[]`

c - 数组中的字符串到另一个数组中

c - 在 C 中反转字符串

c - 用一个新行替换一个或多个空格。

c - 段错误解析json-c

Javascript:使用 for 语句作为变量

C++数组访问

c++ - 每 8 位将 bitset<64> 转换为字符串