printf()生成垃圾

时间:2018-04-03 19:19:32

标签: c printf

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()语句产生垃圾输出

2 个答案:

答案 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] = "";
相关问题