即使字符串以空值终止,程序也会输出奇怪的字符

Gab*_*lli 3 c file

我正在编写一个程序来读取stdin并输出它.

int main() {
    FILE* inputF = stdin;
    char* inputStr[10];

    fread(inputStr, 1, 9, inputF);
    if(ferror(inputF)) {
        printf("An error occurred");
        return 0;
    }

    inputStr[9] = '\0';

    printf("%s", (const char*)inputStr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它应该创建一个10个字符长的字符串并读入9个字节的stdin,然后放入'\0'位置9.

当我运行程序时,结果如下:

gab@testvm:~/work/c/fibo$ ./a.out < test.txt
56                                                                                                     `ô
                                                                                                       ga
Run Code Online (Sandbox Code Playgroud)

打印两行和多余字符(向右滚动以查看它们).

可能是什么导致了这个?

Dan*_*her 9

inputStr 不是字符串,

char* inputStr[10];
Run Code Online (Sandbox Code Playgroud)

这是一个10的数组char *.您应该将声明更改为char inputStr[10];.