1

现在,我有

int main(int argc, char *argv[]) {
    if (argc != 3) {
        printf("Invalid number of command line parameters, exiting...\n");
        exit(1);
    }

    int *numReadings;
    load_readings(argv[1], numReadings);

    return 0;
}

    int *load_readings(char fileName[], int *numReadings) {
        FILE *in = NULL;
        in = fopen(fileName, "r");

        if (in == NULL) {
            printf("Unable to open a file named \"%s\", exiting...\n", fileName);
            fclose(in);
            exit(4);
        }

        printf("%s\n", fileName);
        int size = atoi(fileName);
        printf("Size is %d\n", size);
        int *data = (int *) calloc(size, sizeof(int));

        int i;
        for (i = 0; i < size; i++)
            fscanf(in, "%d", (data + i));
        }
    }

当我执行 size = atoi(fileName) 时,它返回 0。在包括这个站点在内的多个站点上,我看到人们执行“atoi(argv[1])”,但我的总是返回 0。我的 sample.txt 文件有一堆由空格分隔的 3 位数字组成。我的印象是,一旦我得到正确的尺寸,它下面的所有其他东西都会起作用。

4

3 回答 3

1

atoi不告诉size,它只是转换stringinteger
要知道size文件,您需要查找文件末尾,然后询问位置:

    fseek(fp, 0L, SEEK_END); // seek to end of file
    size = ftell(fp);    //get current file pointer
   fseek(f, 0, SEEK_SET); // seek back to beginning of file
于 2012-11-23T17:49:46.700 回答
0

仅当可以转换为整数atoi(string_value)时才返回数字,例如的值为。但如果,值将是,因为不能转换为整数string_valueint size = atoi("1");size1int size = atoi("asd");0asd

如果要获取文件的大小,可以使用struct stat.

于 2012-11-23T17:48:53.443 回答
0

atoi()将字符串转换为整数,似乎您想知道文件大小,或者具体来说,文件必须分配内存的数量,如果数据看起来完全像123 123 123...用空格分隔的 3 位数字,则使用stat()which 返回大小以字节为单位的文件,您可以除以 4:

struct stat st;
/* find the file size in bytes */
/* should check for errors */
fstat(fileName, &st);

/* divide the number of bytes by 4 to get the number of numbers */
int size = st.st_size / 4; 

/* just in case the last number doesn't have a space */
size += (st.st_size % 4) != 0; 

/* allocate memory  */
int *data = calloc(size, sizeof(int));

注意:我不太喜欢这个解决方案,你应该分配一个初始缓冲区,比如 100 个整数,如果你需要更多,你应该使用 realloc()

于 2012-11-23T17:57:05.293 回答