使用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()
使阅读这行代码变得更简单。