需要解释Word2变量

时间:2013-02-12 16:21:24

标签: c cstring strcpy

我理解这个程序不会分配足够的记忆。

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

我说“由于只分配了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);
}

3 个答案:

答案 0 :(得分:4)

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*的大小而不是它指向的记忆。

答案 1 :(得分:2)

sizeof(word2)返回4,因为这是指针的大小

char *word2;

是一个指针,并为其分配了0个字节(如上所述,不是4个)

sizeof(word1)返回20因为数组的大小

char word1[20]

是一个数组,并为它保留了20个字节

答案 2 :(得分:0)

在你的程序word2中会有一些以前的值或者可能是垃圾值。当您执行strcpy(word2, "string number 2");时,您正在尝试写入您无权访问的位置,因此您的程序崩溃了。因此,您需要为程序分配足够的内存。