我想在C中创建一个简单的程序,它将在while循环中获取10个字符串用户输入并将它们存储到文件food.txt中。但是每当我尝试将用户输入再次存储到变量inputFood时就会出现问题。它还会在'strcpy(& allFood,inputFood);'发送错误。线程1:信号SIGABRT。有人可以帮忙吗?
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main() {
int i = 0;
printf("Hello World!\n");
char * inputFood;
char allFood = {0};
FILE * fPointer;
fPointer = fopen("/Users/Antonio/Desktop/food.txt", "a");
while (i < 10){
i = i + 1;
scanf("%s", inputFood);
strcpy(&allFood, inputFood);
}
fputs(&allFood, fPointer);
fclose(fPointer);
}
答案 0 :(得分:1)
为inputFood分配内存,例如100个字符:
inputFood = malloc(100);
并使allFood成为一个数组,而不是char:
char allFood[1000];
因此你需要使用strcat来代替strcpy:
strcat(allFood, inputFood);
然后像这样扫描输入的食物:
scanf("%99s", inputFood);
答案 1 :(得分:0)
char * inputFood;
首先需要为它分配内存。使用malloc/calloc
内存分配。
和
strcpy
用于复制字符串而不是char
。还可以使用fgets
代替scanf
来克服缓冲区溢出问题。
尝试这样的事情:
char inputFood[1024];
char allFood[1024];
while (i < 10){
i = i + 1;
fgets(inputFood, sizeof(inputFood), stdin);
if((strlen(allFood)+strlen(inputFood))<1024)
strncat(allFood, inputFood,strlen(inputFood));
}
答案 2 :(得分:0)
你必须在程序中改变很多东西
1)为inputFood分配内存
inputFood = malloc(100*sizeof(char));
2)因为allFood已经是指针,所以不要在strcpy &
strcat`中使用, and use
。
strcat(allFood, inputFood);
{p>同样适用于fputs
fputs(allFood, fPointer);
3)使allFood
成为一个字符数组,strcpy
和fputs
使用字符指针。
char allFood[1000];