/*
下面代码加“//”的两个语句,如果scanf输入空格,按道理和“c = '\0'”的功能是一样的,为何输出的结果却不同?
运行后输入“a b c d”,希望得到“abcd”
请问大神,这问题出在哪?谢谢!!
*/
#include <stdio.h>
int main(void)
{
void enter_string(char str[]);
void delete_string(char str[], char ch);
void printf_string(char str[]);
char c, str[80];
enter_string(str);
// scanf("%c", &c);
// c = '\0';
delete_string(str, c);
printf_string(str);
return 0;
}
void enter_string(char str[80])
{
gets(str);
}
void delete_string(char str[], char ch)
{
int i, j;
for(i=j=0; str[i]!='\0'; i++)
if(str[i]!=ch)
str[j++] = str[i];
str[j] = '\0';
}
void printf_string(char str[])
{
printf("%s\n", str);
}
下面代码加“//”的两个语句,如果scanf输入空格,按道理和“c = '\0'”的功能是一样的,为何输出的结果却不同?
运行后输入“a b c d”,希望得到“abcd”
请问大神,这问题出在哪?谢谢!!
*/
#include <stdio.h>
int main(void)
{
void enter_string(char str[]);
void delete_string(char str[], char ch);
void printf_string(char str[]);
char c, str[80];
enter_string(str);
// scanf("%c", &c);
// c = '\0';
delete_string(str, c);
printf_string(str);
return 0;
}
void enter_string(char str[80])
{
gets(str);
}
void delete_string(char str[], char ch)
{
int i, j;
for(i=j=0; str[i]!='\0'; i++)
if(str[i]!=ch)
str[j++] = str[i];
str[j] = '\0';
}
void printf_string(char str[])
{
printf("%s\n", str);
}
本文探讨了一段C语言代码中关于字符串处理的问题。主要疑问在于使用两种不同的方式清空字符变量c,一种是通过scanf从标准输入读取一个字符,另一种是直接赋值为NULL字符。尽管两种方式看似等效,但在实际运行中却得到了不同的结果。

被折叠的 条评论
为什么被折叠?



