将字符串存储到C& C中的Char数组中分段故障

时间:2014-10-15 20:27:28

标签: c arrays string char segmentation-fault

我试图阅读输入&将字符串存储在char数组中。但是,编译器会返回分段错误。此外,存储字符串不起作用并导致执行文件崩溃。 这是我的代码:

#include <stdlib.h>
#include <math.h>

/*scan functie*/

int inputProducts(int *resourceCost, int *profit, char **productName)  {   
    int amount, i;   
    printf("number of products: \n");   
    scanf("%d", amount);   
    for (i = 0; i < amount; i++)    {
         printf("product: \n");     
         scanf("%s", productName[i]);   
         printf("resource cost for %s: \n", productName[i]);        
         scanf("%d", &resourceCost[i]);     
         printf("profit for %s: \n", productName[i]);   
         scanf("%d", &profit[i]);   
     }   
    return amount;  
}

int main(int argc, char *argv[])    {   
     int amount;    
     int resourceCost[100],profit[100];     
     char *productName[100];    
     amount =  inputProducts(resourceCost, profit, productName);    
     return 0;  
}

2 个答案:

答案 0 :(得分:1)

 char *productName[100];

productName是一个指针数组,它们未初始化为指向任何有效的内存位置。

scanf("%s", productName[i]);

此处输入输入会导致分段错误。

答案 1 :(得分:0)

scanf("%d", &amount);   
for (i = 0; i < amount; i++)    {
     productName[i] = (char *)malloc(sizeof(char));
     printf("product: \n");     
     scanf("%s", productName[i]);

您没有为要存储在productName中的字符串分配任何空间。尝试在for循环中添加此行代码。 它将为每个字符串在堆上创建空间

productName[i] = (char *)malloc(sizeof(char));