【发布时间】:2018-06-13 02:18:05
【问题描述】:
代码的目的是查看字符串是如何存储的(是否以\n 或\0 结尾)。
void print(char*);
int main(void) {
//fscanf block
char *ss;
ss = malloc(sizeof(char)*100);
printf("String for fscanf: ");
fscanf(stdin, "%s", ss);
printf("For fscanf:\n");
print(ss);
//fgets block
char *gs;
gs = malloc(sizeof(char)*100);
printf("String for fgets: ");
fgets(gs, 10, stdin);
printf("For fgets:\n");
print(gs);
free(ss);
free(gs);
}
void print(char* str) {
int done = 0;
for (int i=0; i<100; i++){
if (done == 3) {
break;
}
if (str[i] == '\0') {
printf("Zero: %d\n", i);
done++;
}
if (str[i] == '\n') {
printf("Return: %d\n", i);
done++;
}
}
}
但是由于某种原因,当我将 fscanf 块放在第一位时,它不会停止并 req 为 fgets 字符串,它只是跳过并输出:
String for fscanf: Hello
For fscanf:
Zero: 5
Zero: 6
String for fgets: For fgets:
Return: 0
Zero: 1
但是当我把 fgets 块放在第一位时,它工作正常:
String for fgets: Hello
For fgets:
Return: 5
Zero: 6
String for fscanf: Hello
For fscanf:
Zero: 5
Zero: 6
为什么会这样?
【问题讨论】: