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)并将其更改为更改字符串 空格(“”)。 我收到了很多警告(指针和整数之间的比较,与字符串文字结果的比较),并且更改函数没有正确返回字符串。我刚拿回一个空格和一个引号。
答案 0 :(得分: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)。
答案 1 :(得分:1)
此:
finalstring = *change(strfromfile); /*getting error here*/
没有意义。 change()
返回一个字符串(char*
),你只是在这里捕获它的第一个字符。然后你将它打印为带有printf()的字符串(%s
),如果你打开了编译器的警告,你就不会期望正常运行,因为它是未定义的行为。打开编译器的警告(例如gcc -Wall -Wextra -Werror
),并考虑使用finalstring
进行的操作。
答案 2 :(得分:1)
只需将“”改为''。
if (str[i] == '\n') {
str[i] = ' ';
答案 3 :(得分:0)
您正在将char *从函数返回到char finalstring。函数调用* change(str)应该只是函数(str);
char *finalstring=change(strfromfile);
确保strfromfile字符串以“\ 0”NULL 字符终止,如果不是strlen()并且打印“%s”也可能是个问题。
答案 4 :(得分:0)
您应该在
之后的字符串中更改字符if(str[i] == '\n')
{
str[i] = ' ';
}