如果我的字符串在这个程序中超过 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));
}

谢谢

吹牛者

最佳答案

您不会收到编译器错误,因为语法是正确的。不正确的是逻辑,并且您得到的是未定义的行为,因为您正在写入超过缓冲区末尾的内存。

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

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

scanf("%9s", aString);

所以你不会溢出你的缓冲区。

关于c - 如何在 C 中使用 calloc()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5100210/

10-11 16:42