char username[50];
printf("[Enter Command]: \n");
scanf("%s", username);
if (strcmp("exit", username) == 0) {
exit(0);
}
if (strcmp("jobs", username) == 0) {
printf("[SERVER] No currently running jobs\n");
}
char dtm[50];
char first_word[50];
char second_word[50];
strcpy(dtm, username);
sscanf(dtm, "%s %s", first_word, second_word);
printf("%s %s\n", first_word, second_word);
我想提取输入字符串的第一个和第二个字。我不明白为什么我的printf()语句产生垃圾输出
答案 0 :(得分:1)
将scanf("%s", username);
替换为gets(username);
(第3行)。
多数民众赞成你的问题所在。 Scanf只是第一个字。
答案 1 :(得分:0)
请始终保持我的printf
永远不会产生任何垃圾。我们是自己创造这些问题的。虽然使用字符串总是要小心并指示字符串的printf
结尾,但我们必须在字符串的末尾添加字符串结尾,即调用空字符\0
或0。 C函数不会在字符串的末尾插入\0
字符,因此我们有责任处理它。最好总是在下面的所有位置初始化一个0的字符串,这是避免像这样的副作用的好习惯之一。
char dtm[50];
char first_word[50];
char second_word[50];
memset(dtm, 0, 50);//or memset(dtm, 0, sizeof(dtm));
memset(first_word, 0, 50);//or memset(first_word, 0, sizeof(first_word));
memset(second_word, 0, 50);// or memset(second_word, 0, sizeof(second_word));
以下练习也很安全。
char dtm[50] = "";
char first_word[50] = "";
char second_word[50] = "";