一个字符串的多个输入

时间:2014-10-08 09:18:20

标签: c xcode input scanf

我想在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);
}

3 个答案:

答案 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成为一个字符数组,strcpyfputs使用字符指针。

char allFood[1000];