while循环中scanf和字符串的问题

时间:2016-06-21 21:27:09

标签: c string pointers scanf

我不明白程序的这部分代码有什么问题。 我正在使用while cicle来要求用户插入一个字符串,该字符串将保存为临时(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: ",i+1);
    scanf("%u",&price);
    item=item_cons(item,name,price);
    i++;
}

2 个答案:

答案 0 :(得分:2)

在您的代码中

scanf("%s",name);

你没有为指针name分配内存。它指向无效的内存位置,并尝试使用它来存储将调用undefined behavior的任何值。

您需要先将内存分配给name,然后才能将内存存储在其指向的内存中。你可以

  • 制作name数组,例如char name[32] = {0};,然后像scanf("%31s",name);一样使用它(通常首选

,或者

  • 使用char *name或系列将动态内存分配到malloc()

答案 1 :(得分:0)

尝试使用 char name [100] = {'\ 0'} 这假设你得到的更大的名字是10

相关问题