c - 简单地通过 char 指针访问函数中的 char 数组

标签 c string pointers printf

在这个程序中,我通过函数指针访问一个全局char 数组,用按char 指针中的地址 更改字符串值会在全局char 数组中产生差异,但是当将字符串作为整个字符串更改时,它不会对全局数组产生任何影响

#include <stdio.h>
#include <string.h>

void function(char *string);

char str[20] = "Hello"; // global char array

int main()
{
    function(str);
    return 0;
}

void function(char *string)
{   
    int i;

    printf("%s\n",string);
    printf("%s\n", str);

    for(i = 0;i < strlen(string);i++)
        string[i] = 'a';    

    printf("%s\n",string);
    printf("%s\n", str);

    string = "jhony";

    printf("%s\n",string);
    printf("%s\n",str);        // here is the doubt 
}

输出

Hello
Hello
aaaaa
aaaaa
jhony
aaaaa //how this supposed to print aaaaa even after we changed string into jhony 

最佳答案

string = "jhony";

不会将"jhony"复制到string指向的内存中。相反,它将 "jhony" 的地址分配给 string

所以之后,string 指向"jhony"str 保持不变。


正如@BrianCain 评论的那样,要将 "jhonny" 复制到由 string 寻址的内存中,您可以使用

strcpy(string, "jhonny");

关于c - 简单地通过 char 指针访问函数中的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336583/

相关文章:

c - #include 守卫不起作用,#pragma Once 已过时

c - Keil uVision(C51 编译器),一元运算符 "!"是什么意思?

带空格的 C++ system() 命令路径

string - Ocaml - 字符串到 (int*int*int) 列表

Javascript 指针/引用疯狂。有人可以解释一下吗?

跨平台VM的C内存管理

c - 不明白 "....*(BYTE *)p=0xff;...."这样的一段代码

c# 将二进制数据读取到字符串中

go - Golang中的指针地址

c - 在 C 中重用内存