现在,我有
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位数字。我的印象是,一旦我正确地确定了尺寸,它下面的所有其他东西都会起作用。
答案 0 :(得分:1)
atoi
没有告诉size
,只是将string
转换为integer
。
了解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
答案 1 :(得分:0)
atoi(string_value)
仅在string_value
可以转换为整数时返回数字,例如int size = atoi("1");
,size
的值将为1
。但是如果int size = atoi("asd");
,则值为0
,因为asd
无法转换为整数
如果您想获取文件大小,可以使用struct stat
。
答案 2 :(得分:0)
atoi()
将字符串转换为整数,看起来您想知道文件大小,或者具体地说,如果数据看起来与123 123 123...
完全相同,则文件必须分配多少个数字? -digit用空格分隔的数字,然后用stat()
返回文件的大小,以字节为单位,你可以除以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()