在C编程语言中声明char数组结果分段错误

时间:2017-12-06 13:38:51

标签: c arrays segmentation-fault character

我只是在创建简单的实现,其中我读取了input.txt文件,该文件包含一行代码,其中包含两个以空格分隔的数字(例如4 4)。

我试图通过首先用空格分隔来区分它们。

我试图将第一个值用作char数组的大小。

然而它一直导致分段错误,但我不知道。

int main(int argc, char **argv){

int number;
int i = 0;
char *token;
char buf[100];
int tempNum[2];

// Open file
FILE * fPointer;
fPointer = fopen("input.txt", "r");

// Read first line
fgets(buf, 1024, fPointer);
token = strtok(buf, " ");
number = atoi(token);

char charArray[number];


while(token != NULL){
    tempNum[i] = atoi(token);
    token = strtok(NULL, "\n");
    printf("%d\n", tempNum[i]);
    i++;
}

如果我注释掉“char charArray [number]”,它不会导致分段错误。如果我只注释掉while循环,则不会导致分段错误。但我无法弄清楚它为什么会导致分割。请帮忙。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这样的东西?

#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
#include <string.h>

#define BUF_SIZE 1024
#define MAX_INPUT 2

int main(int argc, char **argv) {
    char *token = NULL;
    char *next_token = NULL;
    char buf[BUF_SIZE];
    long tempNum[MAX_INPUT] = { 0 };
    const char *delim = " ";
    char * end = NULL;

    // Init vars
    memset(buf, 0, BUF_SIZE);

    // Open file
    FILE * fPointer = fopen("input.txt", "r");
    if (fPointer == NULL) {
        return 1;
    }

    // Read first line
    if (fgets(buf, BUF_SIZE, fPointer) == NULL) {
        fclose(fPointer);
        return 2;
    }

    // Parse line
    token = strtok_s(buf, delim, &next_token);
    for (int i = 0;((i < MAX_INPUT) && (token != NULL)); i++){
        tempNum[i] = strtol(token, &end, 10);
        if (*end != NULL){
            printf("error in %s\n", token);
        } else {
            printf("%d\n", tempNum[i]);
        }
        token = strtok_s(NULL, delim, &next_token);
    }

    fclose(fPointer);
    return 0;
}