Strtol 没有 return 正确的 endptr - C
Strtol doesn't return the correct endptr - C
我必须从文件行中解析数据,为此我现在正在使用 strtol() 函数。
例如,我在文本文件中有这一行:1 abc
例如,这是一个无效行,因为该特定行必须包含一个且只能包含一个整数值。
现在,当我以这种方式使用 strtol 时:
FILE *fs;
fs = fopen("file.txt", "r");
char* ptr = NULL; // In case we have string except for the amount
char lineInput[1024]; // The max line size is 1024
fscanf(fs, "%s", lineInput);
long numberOfVer = strtol(lineInput, &ptr, BASE);
printf("%lu\n%s\n", numberOfVer, ptr); // Here I test the values, I expect to get 1 followed by newline and abc
if (numberOfVer == 0 || *ptr != '[=11=]') { // Not a positive number or there exists something after the amount!
fprintf(stderr, INVALID_IN);
return EXIT_FAILURE;
}
但是,ptr 字符串不是 "abc" 或“abc”,它是一个空字符串...
这是为什么?根据文档,它必须是“abc”。
scanf("%s")
跳过空格。因此,如果您有输入 "1 abc"
并使用
扫描它
fscanf(fs, "%s", lineInput);
lineInput
内容最终为 "1"
,其余字符串保留在输入缓冲区中,为下一次输入操作做好准备。
通常读取行的函数是fgets()
FILE *fs;
fs = fopen("file.txt", "r");
char* ptr = NULL; // In case we have string except for the amount
char lineInput[1024]; // The max line size is 1024
// using fgets rather than fscanf
fgets(lineInput, sizeof lineInput, fs);
long numberOfVer = strtol(lineInput, &ptr, BASE);
printf("%ld\n%s\n", numberOfVer, ptr); // Here I test the values, I expect to get 1 followed by newline and abc
// ^^^ numberOfVer is signed
if (numberOfVer == 0 || *ptr != '[=11=]') { // Not a positive number or there exists something after the amount!
fprintf(stderr, INVALID_IN);
return EXIT_FAILURE;
}
我必须从文件行中解析数据,为此我现在正在使用 strtol() 函数。
例如,我在文本文件中有这一行:1 abc
例如,这是一个无效行,因为该特定行必须包含一个且只能包含一个整数值。
现在,当我以这种方式使用 strtol 时:
FILE *fs;
fs = fopen("file.txt", "r");
char* ptr = NULL; // In case we have string except for the amount
char lineInput[1024]; // The max line size is 1024
fscanf(fs, "%s", lineInput);
long numberOfVer = strtol(lineInput, &ptr, BASE);
printf("%lu\n%s\n", numberOfVer, ptr); // Here I test the values, I expect to get 1 followed by newline and abc
if (numberOfVer == 0 || *ptr != '[=11=]') { // Not a positive number or there exists something after the amount!
fprintf(stderr, INVALID_IN);
return EXIT_FAILURE;
}
但是,ptr 字符串不是 "abc" 或“abc”,它是一个空字符串... 这是为什么?根据文档,它必须是“abc”。
scanf("%s")
跳过空格。因此,如果您有输入 "1 abc"
并使用
fscanf(fs, "%s", lineInput);
lineInput
内容最终为 "1"
,其余字符串保留在输入缓冲区中,为下一次输入操作做好准备。
通常读取行的函数是fgets()
FILE *fs;
fs = fopen("file.txt", "r");
char* ptr = NULL; // In case we have string except for the amount
char lineInput[1024]; // The max line size is 1024
// using fgets rather than fscanf
fgets(lineInput, sizeof lineInput, fs);
long numberOfVer = strtol(lineInput, &ptr, BASE);
printf("%ld\n%s\n", numberOfVer, ptr); // Here I test the values, I expect to get 1 followed by newline and abc
// ^^^ numberOfVer is signed
if (numberOfVer == 0 || *ptr != '[=11=]') { // Not a positive number or there exists something after the amount!
fprintf(stderr, INVALID_IN);
return EXIT_FAILURE;
}