2014-10-08 151 views
0

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

分配内存inputFood,例如100个字符:

inputFood = malloc(100); 

和使allFood阵列,而不是一个字符:

char allFood[1000]; 

因此,您将需要像这样使用strcat indstead strcpy:

strcat(allFood, inputFood); 

和扫描输入的食物是这样的:

scanf("%99s", inputFood); 
+0

strcpy的工作正常.. – Haris 2014-10-08 09:33:18

+0

'的scanf( “%S”,inputFood);'是含义'的scanf( “%S”,inputFood)相同;'。 – BLUEPIXY 2014-10-08 09:33:27

+1

@BLUEPIXY意思相同,但实际上避免在标准输入中留下'\ n'是至关重要的。我推荐使用fgets或其他代替scanf – Igor 2014-10-08 09:36:14

0

,你必须改变很多事情在你的程序

1)分配内存inputFood

inputFood = malloc(100*sizeof(char)); 

2) allFood已经是一个指针,不要在strcpy , and use strcat中使用&

​​

同样适用于fputs

fputs(allFood, fPointer); 

3)使allFood的字符阵列,如strcpyfputs使用字符指针。

char allFood[1000]; 
相关问题