在C中使用POINTERS实现一维字符数组(基本上是字符串)?

时间:2018-01-18 12:47:18

标签: c arrays pointers

我无法理解为什么整个" abcde"不是从我的代码打印出来的,你能帮忙吗?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int L,i,j;
    char *p;
    scanf("%d",&L);
    p=(char *)malloc(L+1);
    for(i=0;i<L;i++)
     scanf("%c",p+i);
    *(p+i)='\0';
    for(j=0;j<L;j++)
     printf("%c",*(p+j));
}

输出:https://ibb.co/jv2HnR

1 个答案:

答案 0 :(得分:2)

在第二次输入读取字符串长度后,输入流中还会留下换行符,即将进行的scanf()调用会读取该字符。因此,在逐个字符地读取字符串的内部循环之后,您实际上得到了这样的字符串:

{'\n', 'a', 'b', 'c', 'd', '\0'};

因此,您的打印声明完全相同:

printf("\nabcd");

您可以通过在scanf()格式字符串之前插入空格来跳过空格:

for (j = 0; j < L; j++)
    scanf(" %c", p+j);
//         ^

通过这种方式,您可以获得所需的输出。