#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
char *name;
int a;
name=(char *)malloc(sizeof(name));
printf("no. of names:");
scanf("%d",&a);
int i;
for(i=0;i<a;i++)
{
printf("enter the names:");
scanf("%s",name);
}
for(i=0;i<a;i++)
{
printf("entered names are:%s\n",name);
}
return 0;
free(name);
}
如何在c中打印n个输入的字符串已经问过这个问题,但我没有得到任何正确的答案任何身体已知答案请编辑我的代码请如果你运行我的代码它显示最后一个字符串我不知道为什么请帮助..
答案 0 :(得分:1)
您需要一系列名称。要实现您要执行的操作,您可以使用具有最大大小的静态数组,也可以使用以下程序中的内存分配内存。 请注意,您还应该测试malloc的返回值...以防万一。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
char **name;
int a;
printf("no. of names:");
scanf("%d",&a);
int i;
if( a<=0 )
return 0;
name = (char**)malloc( sizeof(char*)*a);
for(i=0;i<a;i++)
{
printf("enter the name:");
name[i]=(char*)malloc( sizeof(char)*128);
scanf("%s",name[i]);
}
for(i=0;i<a;i++)
{
printf("entered names are:%s\n",name[i]);
free(name[i]);
}
free(name);
return(0);
}
注意我必须抛出malloc,因为OP正在使用的编译器引发错误“无法从'void'转换为'char **'”(这意味着它足够老了......)
答案 1 :(得分:0)
在
name=(char *)malloc(sizeof(name));
名称是char*
,因此sizeof(name)
是地址的大小。因此,你没有分配足够的内存。
只需分配更多内存:
name=(char *)malloc(sizeof(char)*20); //allocating 20 bytes for the block that name will point tor
答案 2 :(得分:0)
除了错误的空间分配(由brokenfoot回答)之外,你不会得到你想要的结果,因为你在同一个变量name
中反复阅读所有的名字,然后打印最后输入的名字a
次:{/ p>
for(i=0;i<a;i++)
{
printf("enter the names:");
scanf("%s",name);
}
for(i=0;i<a;i++)
{
printf("entered names are:%s\n",name);
}
正确的方法是使用数组存储所有名称,然后逐个打印它们。例如:
for(i=0;i<a;i++)
{
printf("Enter the names:")
scanf("%s",name[a]);
}
print("The entered names are: ");
for(i=0;i<a;i++)
{
printf("%s", name[a]);
}