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 - 互斥体初始化 -(UNIX)

c++ - 从二维数组 c++ 打印空格而不是整数

Android - 当我在 EditText 中输入时,下一个 EditText 中不计算值?

javascript - 将属性分配给数组 js/jquery 中的值

javascript - 在出现第一个空格时拆分字符串

java - 在 java 字符串中转义 % 符号以应用 String.format

c - 如何在 C 中以常数时间交换两个矩阵?

c - 当 vsnprintf 不可用时安全地格式化字符串

c - 符号表与集合

php - json_encode 数组的特定部分