使用malloc分配动态内存

使用malloc分配动态内存,c,pointers,dynamic-memory-allocation,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 *

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

这是我的代码

    #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);
    }

scanf
-

scanf(" %c",&ptr[i]);
因为在给定
n
的值后按
ENTER
时,在
n
的第一次
scanf
后,缓冲区中将剩余
'\n'

您不需要强制转换
malloc
的结果

正如马特·麦克纳布先生在评论中所说的,你可以这样做-

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

%*c
将处理
'\n'
,如果只点击
空格
,甚至不会跳过。

scanf
中的
%c
之前留一个空格-

scanf(" %c",&ptr[i]);
因为在给定
n
的值后按
ENTER
时,在
n
的第一次
scanf
后,缓冲区中将剩余
'\n'

您不需要强制转换
malloc
的结果

正如马特·麦克纳布先生在评论中所说的,你可以这样做-

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

%*c
将处理
'\n'
,如果只点击
空格
,甚至不会跳过。

scanf
中的
%c
之前留一个空格-

scanf(" %c",&ptr[i]);
因为在给定
n
的值后按
ENTER
时,在
n
的第一次
scanf
后,缓冲区中将剩余
'\n'

您不需要强制转换
malloc
的结果

正如马特·麦克纳布先生在评论中所说的,你可以这样做-

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

%*c
将处理
'\n'
,如果只点击
空格
,甚至不会跳过。

scanf
中的
%c
之前留一个空格-

scanf(" %c",&ptr[i]);
因为在给定
n
的值后按
ENTER
时,在
n
的第一次
scanf
后,缓冲区中将剩余
'\n'

您不需要强制转换
malloc
的结果

正如马特·麦克纳布先生在评论中所说的,你可以这样做-

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


%*c
将负责
'\n'
并且在只点击
空格时甚至不会跳过。

请注意
sizeof(char)
始终为1,因此您可以用
ptr=malloc(n+1)替换分配@WayneSudo错误。由于C99的
main()
的返回值隐式地
0
。没有指针
p
不要强制转换malloc(),而“ptr=(char*)malloc((n+1)*sizeof(char));”与malloc((n+1)*1相同,这就是您需要的吗?请注意
sizeof(char
始终是1,因此,您可以用
ptr=malloc(n+1)替换分配@WayneSudo错误。由于C99的
main()
的返回值隐式地
0
。没有指针
p
不要强制转换malloc(),而“ptr=(char*)malloc((n+1)*sizeof(char));”与malloc((n+1)*1相同,这就是您需要的吗?请注意
sizeof(char
始终是1,因此,您可以用
ptr=malloc(n+1)替换分配@WayneSudo错误。由于C99的
main()
的返回值隐式地
0
。没有指针
p
不要强制转换malloc(),而“ptr=(char*)malloc((n+1)*sizeof(char));”与malloc((n+1)*1相同,这就是您需要的吗?请注意
sizeof(char
始终是1,因此,您可以用
ptr=malloc(n+1)替换分配@WayneSudo错误。由于C99,
main()
的返回值隐式地
0
。没有指针
p
不强制转换malloc(),“ptr=(char*)malloc((n+1)*sizeof(char));”与malloc((n+1)*1)相同,这就是你需要的?他可能想要进入空间并拥有它们count@MattMcNabb请看编辑,先生。我想说明你的观点。实际上,整个循环应该被
fgets(ptr,n+1,stdin)取代
@TheParamagneticCroissant实际上这是对的,但他也必须照顾好ameyCU是的,毫无疑问!只是
fgets()
让阅读这行代码变得更简单。他可能想输入空格并将其保留下来count@MattMcNabb请看编辑,先生。我想说明你的观点。实际上,整个循环应该被
fgets(ptr,n+1,stdin)取代
@TheParamagneticCroissant实际上这是对的,但他也必须照顾好ameyCU是的,毫无疑问!只是
fgets()
让阅读这行代码变得更简单。他可能想输入空格并将其保留下来count@MattMcNabb请看编辑,先生。我想说明你的观点。实际上,整个循环应该被
fgets(ptr,n+1,stdin)取代
@TheParamagneticCroissant实际上这是对的,但他也必须照顾好ameyCU是的,毫无疑问!只是
fgets()
让阅读这行代码变得更简单。他可能想输入空格并将其保留下来count@MattMcNabb请看编辑,先生。我想说明你的观点。实际上,整个循环应该被
fgets(ptr,n+1,stdin)取代
@TheParamagneticCroissant实际上这是对的,但他也必须照顾好ameyCU是的,毫无疑问!只是
fgets()
使阅读这行代码变得更简单。