这个程序是在句子中取前两个单词并将它们放在最后,输入和输出为单个字符串。
但是我最后得到了额外的'^'。
输入:
我现在要去找Wookiee
预期产出:
现在去找我的Wookiee
获得输出:
现在去找我的Wookiee
#include <stdio.h>
#include <string.h>
int main() {
char a[100], b[100], e[100];
int c = 0, i, k = 0, j = 0;
gets(a);
for(i = 0; i <= strlen(a); i++)
{
if (a[i] == ' ' && j < 2)
{
c = i;
j++;
}
}
for(i = c + 1; i <= strlen(a); i++)
{
b[k] = a[i];
k++;
}
e[0] = ' ';
for(i = 1; i <= c; i++)
{
e[i] = a[i - 1];
}
e[i]= ' ';
strcat(b, e);
printf("%s", b);
return 0;
}
输入:给印度人民 输出:印度人民
答案 0 :(得分:2)
我对此进行了测试,您的代码在我的系统中运行良好。这可能主要是因为您没有在代码中初始化字符数组a,b,e
,并且它们可能包含垃圾值。在将它们初始化为“0”之后,事情并不奇怪。
另外,在[e]&#39; e [i]&#39中你不需要额外的空间。 ;在strcat
之前致电,如以下程序所示。
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
int main()
{
//char a[100]={0},b[100]={0},e[100]={0};
char a[100]={0},b[100]={0},e[100]={0};
int c=0,i,k=0,j=0;
gets(a);
for(i =0;i<=strlen(a);i++)
{
if (a[i] == ' '&& j<2)
{
c=i;
j++;
}
}
for(i=c+1;i<=strlen(a);i++)
{
b[k]=a[i];
k++;
}
e[0]=' ';
for(i=1;i<=c;i++)
{
e[i]=a[i-1];
}
//e[i]=' ';
strcat(b,e);
printf("[%s]\n",b);
return 0;
}
此外,从安全/更好的编程角度来看,在声明变量时初始化变量总是好的。通过这种方式,我们可以确定变量包含哪些值,而不是依赖于OS。
答案 1 :(得分:1)
您可以将代码修改为:
....
}
e[i] = '\0'; //<-- with space i crashed here, with that i get 'get the wookies I will'
strcat(b, e);
printf("%s", b);
return 0;
}
字符串以\ 0结尾 没有\ 0一个字符串函数将读取,直到第1 \ 0 即使它不是你的字符串记忆。
答案 2 :(得分:0)
您在此处有未定义的行为,因为您在e
字符串中缺少要附加到字符串b
的NUL终止符。
在我的电脑上程序实际上已经崩溃了。
for(i=1;i<=c;i++)
{
e[i]=a[i-1];
}
e[i] = ' ';
e[i+1] = 0; // <<<< add this line in your code
strcat(b,e);
printf("%s",b);
return 0;
答案 3 :(得分:0)
这一行:e[i]= ' ';
无法正确终止e
中的字符串,
因此,当调用printf()
时,会打印更多字符,直到遇到\0
为止。
通常,缺少正确的字符串终止字符会导致未定义的行为,从而导致分段错误事件。
此问题的症状是额外的印刷字符。
可能还有其他额外字符,在内存中遇到\0
之前无法打印。