使用malloc分配动态内存

时间:2015-08-28 11:07:16

标签: c pointers dynamic-memory-allocation

以下是我的代码示例。我想创建用于存储字符串的动态字符数组。

这是我的代码

    #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

1 个答案:

答案 0 :(得分:3)

%c -

中的scanf之前留一个空格
scanf(" %c",&ptr[i]);

因为在给出'\n'的值后按scanfn的第一个ENTER后,缓冲区中会留下n

而且您不需要投射malloc的结果。

正如 Matt McNabb先生在评论中所说的那样,你可以这样做 -

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

%*c会处理'\n',如果仅space被点击,则不会跳过。