gpt4 book ai didi

c - 在 C 中使用指针打印字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:17 24 4
gpt4 key购买 nike

我目前正在学习如何在 C 中使用指针和内存分配,并编写一个简单的代码片段来尝试使用指针打印字符串。我现在拥有的是:

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

char *aString(void)
{
char str[20];
strcpy(str, "Hello World!");
return str;
}

int main(int argc, char **argv)
{
char *ptr = malloc(20);
ptr = aString();
printf("%s\n", ptr);
free(ptr);
exit(0);
}

它只打印一个空行并告诉我对 free 的调用使用了一个无效指针。谁能花时间解释一下我在哪里思考问题的方式不对?

编辑:感谢您的所有回答,我正在通读所有内容。

最佳答案

函数aString()中声明的数组str[20]allocated in the program stack .当程序退出 aString() 时,该数组从内存中弹出并且不再可访问,从而使 ptr 指向无效指针。

另一方面,malloc() 函数从堆中分配内存,可以在 aString() 中使用:

char *aString() {
char *str = malloc(20);
strcpy(str, "Hello World!");
return str;
}

然后在您的 main() 中:

char *ptr = aString();
printf("%s\n", ptr);
free(ptr);

关于c - 在 C 中使用指针打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com