我在C语言和整个编程中有点绿,所以我需要任务方面的帮助。
我试图找到这个问题的答案,而我想到的只是这段代码有效,但是 输出:
vhiag hwag tiatg
必需的输出:
vhiag hw tiat
size=sizeof(ss)/sizeof(ss[0]);
if(strcmp(op,"first")==0){
while(1){
if(fgets(ss,512,fp)==NULL){
break;
}
first(ss,size);
}
}
void first(char spaces[],int size)
{
int i=1;
char r[size];
r[0]=spaces[0];
int j;
for(j=0;j<size;j++)
{
if(spaces[j]==' ')
{
r[i]=spaces[j+1];
i++;
}
}
r[i]='\0';
printf("%s\n",&r);
return;
}
答案 0 :(得分:1)
您的first()
函数将扫描呈现给它的整个数组,即所有size
字节,而不考虑其中是否存在字符串终止符。因此,如果输入行短于上一行,则您的函数会巧妙地扫描第二行在第一行上的覆盖。
要在行尾停止扫描,请在看到终止符时从循环中中断:
for (j = 0; spaces[j] != '\0'; j++)
您还可以在j
达到或超过size
的情况下中断(作为附加,而不是替代条件),但是在您的情况下这并不是必须的,因为您可以依靠fgets()
在指定给它的字节数内提供该终止符。