while循环中的scanf和字符串问题
我不明白我程序的这部分代码出了什么问题。 我使用while循环请求用户插入一个字符串,该字符串将被保存为临时(char*name)字符串,然后作为函数的参数传递。但是问题是当我使用scanf函数时。代码如下:while循环中的scanf和字符串问题,c,string,pointers,scanf,C,String,Pointers,Scanf,我不明白我程序的这部分代码出了什么问题。 我使用while循环请求用户插入一个字符串,该字符串将被保存为临时(char*name)字符串,然后作为函数的参数传递。但是问题是当我使用scanf函数时。代码如下: char *name; size_t i=0; while(i<size){ printf("Insert #%zu item name: ",i+1); scanf("%s",name); printf("Insert #%zu item price: "
char *name;
size_t i=0;
while(i<size){
printf("Insert #%zu item name: ",i+1);
scanf("%s",name);
printf("Insert #%zu item price: ",i+1);
scanf("%u",&price);
item=item_cons(item,name,price);
i++;
}
char*名称;
尺寸i=0;
而(i在您的代码中
scanf("%s",name);
您没有为指针name
分配内存。它指向无效的内存位置,并试图使用它存储将调用的任何值
您需要将内存分配给name
,然后才能使用该内存在其指向的内存中存储任何内容
- 使
name
成为一个数组,如char name[32]={0};
然后像scanf(“%31s”,name);
一样使用它(通常首选)
或者
- 使用
malloc()
或family将动态内存分配给char*name
在您的代码中
scanf("%s",name);
您没有为指针name
分配内存。它指向无效的内存位置,并试图使用它存储将调用的任何值
您需要将内存分配给name
,然后才能使用该内存在其指向的内存中存储任何内容
- 使
name
成为一个数组,如char name[32]={0};
然后像scanf(“%31s”,name);
一样使用它(通常首选)
或者
- 使用
malloc()
或family将动态内存分配给char*name
尝试使用
字符名[100]={'\0'}
这假设您将获得的较大名称是10
字符名[100]={'\0'}
这假设您将获得的较大名称是10,但问题是当我使用scanf函数时它是什么?哦,对不起,我忘了插入它。好的,这就是问题:当我插入它打印的字符串时(大小)times insert 1-2-3-4-…-尺寸项目名称和insert 1..size项目价格但是问题是当我使用scanf函数时
它是什么?哦,对不起,我忘了插入它。好的,这就是问题:当我插入它为(尺寸)打印的字符串时,times insert 1-2-3-4-…-尺寸项目名称和insert 1..size项目价格我使用的名称=malloc sizeof(char*)*大小);它可以工作,谢谢你!@Gio不,它看起来不像,相反,你可能想要name=malloc(sizeof(*name)*size);
Note:1)你需要检查malloc()
2)是否成功,然后你需要释放内存。数组有什么问题?等等,仅仅因为它工作,并不意味着它是正确的<代码>名称=malloc(sizeof(char*)*size)
错误,因为您希望为char
s分配内存,而不是char*
s。。。请参阅我前面的评论^。最好说name
缺少初始化-未指定其内容。C没有指定名称
指向无效的内存位置。顺便说一句:“尝试使用(通过反引用)存储任何值将调用未定义的行为。”为真,甚至读取指针值也是UB。我使用了name=malloc(sizeof(char*)*size);而且很有效谢谢你@Gio不,它看起来不像,相反,您可能需要name=malloc(sizeof(*name)*size)代码>注意:1)您需要检查malloc()
2)是否成功,然后才能释放内存。数组有什么问题?等等,仅仅因为它工作,并不意味着它是正确的<代码>名称=malloc(sizeof(char*)*size)
错误,因为您希望为char
s分配内存,而不是char*
s。。。请参阅我前面的评论^。最好说name
缺少初始化-未指定其内容。C没有指定名称
指向无效的内存位置。顺便说一句:“尝试使用(通过反引用)存储任何值将调用未定义的行为。”是真的,并且有点令人惊讶,即使读取指针值也是UB。添加一些关于此答案如何帮助OP解决当前问题的解释以及关于此答案如何帮助OP解决当前问题的解释