2013-06-01 76 views
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)的改变一个字符串,并将其转变成 空间(”“)。 我收到很多警告(比较指针和整数,与字符串文字结果进行比较),并且更改函数没有正确返回字符串。我只是找回一个空格和一个引号。

+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 [1] =”“;

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

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

这里不需要。 此外,它似乎你忘了宣布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)。

+0

好的,非常感谢。现在一切正常。 – user2440329

1

此:

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

没有道理。 change()返回一个字符串(char*),并且您只是在此处捕获其第一个字符。然后你用printf()作为字符串(%s)打印它,如果你打开了编译器的警告,你永远不会期望正确运行,因为它是未定义的行为。打开编译器的警告(例如gcc -Wall -Wextra -Werror)并考虑您在finalstring中所做的操作。

0

您正在将char *从函数返回给char finalstring。函数调用*变化(str)应该只是函数(str);

char *finalstring=change(strfromfile); 

确保strfromfile字符串用 “\ 0” NULL字符如果不strlen的()和打印 “%S” 也可能是一个问题。

1

只需将“”更改为“”。

if (str[i] == '\n') { 
      str[i] = ' '; 
0

您应该更改字符串中字符,你可以做以下

if(str[i] == '\n') 
{ 
    str[i] = ' '; 
}