gpt4 book ai didi

c - 需要解释 Word2 变量

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:27 25 4
gpt4 key购买 nike

我明白这个程序没有分配足够的内存。

我需要帮助的是描述执行此代码时发生的情况的解释。

我输入“由于只分配了 4 个空间,因此没有提供足够的空间,因此会导致错误。”这对我来说听起来不对。谢谢。

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

int main()
{
char word1[20];
char *word2;

word2 = (char*)malloc(sizeof(char)*20);

printf("Sizeof word 1: %d\n", sizeof (word1)); //This line outputs 20
printf("Sizeof word 2: %d\n", sizeof (word2)); //This line outputs 4
//before & after I used malloc
strcpy(word1, "string number 1");
strcpy(word2, "string number 2"); <---- What is this doing

printf("%s\n", word1);
printf("%s\n", word2);
}

最佳答案

word2 是一个未初始化的指针。向其写入数据会产生未定义的后果,但可能会崩溃。您需要在堆栈上(如 word1)或使用 malloc 动态为其分配内存。

char *word2 = malloc(20); // arbitrary value. could use strlen(some_str)+1 also
strcpy(word2, "string number 2"); // works now

或者,对于 posix 系统

char *word2 = strdup("string number 2");

无论哪种情况,请确保稍后调用 free 将此内存返回给系统。

请注意,即使在分配内存后,sizeof(word2) 仍将保持为 4。这是因为 word2 的类型为 char*,所以 sizeof 报告的是 char* 的大小,而不是它指向的内存。

关于c - 需要解释 Word2 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836978/

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