char数组的第一个元素被自动初始化为null.strings,scanf,printf

时间:2014-10-06 12:53:52

标签: c string character scanf

输入:9表示法

printf("Input N value\n");
scanf("%d",&N);
char X[N];
int i=0,N=0;
for (i=0;i<N-1;i++)
 {
scanf("%c",&X[i]);
}
X[N-1]='\0';


for (i=0;i<N-1;i++)
{
printf("%c",X[i]);
}

预期输出:符号 输出:notatio

为什么会这样?

2 个答案:

答案 0 :(得分:1)

当您使用第一次scanf调用读取长度时,在输入缓冲区中留下换行符。

在第二次scanf调用时,读取的第一个字符是换行符,然后是其余字符。在第二个scanf字符串参数中的%c之前添加空格将消耗任何左侧换行符。

scanf(" %c",&X[i]);

在打印之前,您也不会将字符串终止。

X[N-1] = '\0' ;

答案 1 :(得分:0)

你不必在for循环中减去1,否则最后会丢失1个字符!

这应该有效:

#include <stdio.h>

int main() {

    int charNumber, charCount;

    printf("Input N value\n>");
    scanf("%d", &charNumber);

    char text[charNumber+1];

    for (charCount = 0; charCount < charNumber; charCount++)
        scanf(" %c", &text[charCount]);

    text[charNumber] = '\0';

    for (charCount = 0; charCount <= charNumber; charCount++)
            printf("%c", text[charCount]);

    return 0;

}

您还可以使用以下字符打印字符串:

printf("%s", text);