首页 文章

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

提问于
浏览
-1

我只是创建简单的实现,其中我读取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

    像这样的东西?

    #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;
    }
    

相关问题