0
if (part == TRUE) {
    char finalstring;
    finalstring = *change(strfromfile);
    printf("\n%s", finalstring);
}
return 0;

}

char
*change(char *str) {
    int i, len;
    len = strlen(str);
    for (i=0; i < len; i++){
        if (str[i] == "\n") {
              str[i] = " ";
        } 
    }
return str;
}

所以我试图通过删除换行符(\n)并将它们更改为空格(“”)来更改字符串。我收到很多警告(指针和整数之间的比较,与字符串文字结果的比较)并且更改函数没有正确返回字符串。我只是得到一个空格和一个引号。

4

5 回答 5

3

你代码中的一些语句很麻烦,会给你警告

char
*change(char *str) {
    int i, len;
    len = strlen(str);
    for (i=0; i < len; i++){
        if (str[i] == "\n") {   //this is troublesome
              ****str[i] = " "; //this is troublesome****
        } 
    }
return str;
}

添加str[i] = ' '而不是 str[i]="";

您正在尝试比较字符串文字和字符 - 这是不可接受的

char
    *change(char *str) {
        int i, len;
        len = strlen(str);
        for (i=0; i < len; i++){
            if (str[i] == '\n') {
                  str[i] = ' '; 
            } 
        }
    return str;
    }

这里*change(strfromfile)不需要。此外,您似乎忘记了声明char *finalstring,但您声明 char finalstring并分配了一个指向它的指针,这是不可接受的。

if (part == TRUE) {
    char finalstring;  //this is troublesome
    finalstring = *change(strfromfile);   //this is trouble some
    printf("\n%s", finalstring);
}
return 0;

}

change to 


 if (part == TRUE) {
    char *finalstring;
    finalstring = change(strfromfile);  
    printf("\n%s", finalstring);
}
return 0;
}

我希望这已经足够了。从下一次开始尝试发布整个可编译代码而不是片段。简短的自包含代码示例 (SSCCE)。

于 2013-06-01T09:35:34.650 回答
1

只需将 "" 更改为 ' ' 。

if (str[i] == '\n') {
          str[i] = ' ';
于 2013-06-01T09:36:43.463 回答
1

这个:

finalstring = *change(strfromfile);  /*getting error here*/

没有意义。 change()返回一个字符串 ( char*),你只是在这里捕获它的第一个字符。然后你%s用 printf() 将它打印为字符串 ( ),如果你打开了编译器的警告,你永远不会期望它能够正常运行,因为它是未定义的行为。打开编译器的警告(例如gcc -Wall -Wextra -Werror),想想你在做什么finalstring

于 2013-06-01T09:34:39.610 回答
0

您应该更改字符串中的字符,您可以执行以下操作

if(str[i] == '\n')
{
   str[i] = ' ';
}
于 2013-06-01T09:37:43.567 回答
0

您将从函数返回的 char * 分配给 char finalstring。函数调用 *change(str) 应该只是 function(str);

char *finalstring=change(strfromfile);

如果不是 strlen(),请确保 strfromfile 字符串以 "\0" NULL字符结尾,并且打印 "%s" 也可能是一个问题。

于 2013-06-01T09:34:43.450 回答