如何在C中使用calloc()?

时间:2011-02-24 03:59:55

标签: c string gcc calloc strlen

如果我的字符串在此程序中超过9个字符,我不应该收到错误吗?

// CString.c
// 2.22.11

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

main()
{
    char *aString = calloc(10, sizeof(char));

    if (aString == NULL)
    {
        return 1;
    }

    printf("PLEASE ENTER A WORD: ");
    scanf("%s", aString);

    printf("YOU TYPED IN: %s\n", aString);
    //printf("STRING LENGTH: %i\n", strlen(aString));
}

由于

blargman

2 个答案:

答案 0 :(得分:6)

由于语法正确,您不会收到编译器错误。什么是不正确的逻辑,你得到的是未定义的行为,因为你写入缓冲区末尾的内存。

为什么它是未定义的行为?嗯,你没有分配那个内存,这意味着它不属于你 - 你正在闯入一个用警告磁带封闭的区域。考虑您的程序是否在缓冲区之后直接使用内存。你现在已经覆盖了那个记忆,因为你占了你的缓冲区。

考虑使用像这样的大小说明符:

scanf("%9s", aString);

所以你不要超过你的缓冲区。

答案 1 :(得分:1)

是的,你收到了一个错误。而最不幸的是你不知道它。你可能会在以后的程序中知道它什么时候会发生神秘的事情(如果你很幸运),或者你的客户的律师来起诉你(如果你不是)。