【发布时间】:2011-10-25 05:08:56
【问题描述】:
我得到了以下内容。
my-app.c文件:
char username[USERNAME_MAX_LEN] = "\0";
char password[PASSWORD_MAX_LEN] = "\0";
scanf("%s %s", username, password);
printf("username-len: %ld, password-len: %ld\n", strlen(username), strlen(password));
credentials.data文件:
jdons f4$dsef35fs
所以:
$ ./my-app < credentials.data
username-len: 0, password-len: 0
和:
$ cat credentials.data | ./my-app
username-len: 5, password-len: 10
- 为什么在这两种方式中输入的处理方式不同?有什么区别呢?
- 使用
scanf()能够以相同方式处理这两种情况的正确方法是什么?
【问题讨论】:
-
这不应该发生。您正在实际代码中执行其他操作。我怀疑这是您实际上没有尝试过的“简化”。
-
我不能再复制了,很奇怪。好像有点不正常。现在上面的情况正常。谢谢大家!
-
使用
""而不是"\0"来初始化你的字符数组更清楚。 (这与您的问题无关,只是一个风格点。) -
忽略 scanf 的返回值丢失了可能有用的信息。根据我的经验,scanf 对不完全符合预期的输入过于挑剔,大多数人最好忘记它的存在。