以下是我的代码示例。我想创建用于存储字符串的动态字符数组。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i , j , n;
char *ptr;
printf("enter number of elements \n");
scanf("%d",&n);
ptr = (char *) malloc((n + 1)*sizeof(char));
for (i = 0;i< n;i++)
{
scanf("%c",&ptr[i]);
}
for ( i = 0;i <n; i++)
{
printf("at %d is %c\n",i,*(ptr + i));
}
free(ptr);
}
但是当我尝试编译并运行此代码时,没有字符被分配给指针p
指向的内存。
以下是我的程序的输出:
jharvard@appliance (~/c): ./test2
enter number of elements
8
asdfghjk
at 0 is
at 1 is a
at 2 is s
at 3 is d
at 4 is f
at 5 is g
at 6 is h
at 7 is j
答案 0 :(得分:3)
在%c
-
scanf
之前留一个空格
scanf(" %c",&ptr[i]);
因为在给出'\n'
的值后按scanf
,n
的第一个ENTER
后,缓冲区中会留下n
。
而且您不需要投射malloc
的结果。
正如 Matt McNabb先生在评论中所说的那样,你可以这样做 -
scanf("%*c%c",&ptr[i]);
%*c
会处理'\n'
,如果仅space
被点击,则不会跳过。