C '的冲突类型;反向#u字符串';功能

C '的冲突类型;反向#u字符串';功能,c,string,C,String,我在一个需要反转字符串的程序中使用。我遇到的问题是,我似乎无法使函数工作。以下是我的代码: int main(int argc, char *argv[]){ char *test = "Testing"; fputs(test, stdout); fputs(reverse_string(test), stdout); } char* reverse_string(char *str){ char temp; size_t len = strlen(str) - 1;

我在一个需要反转字符串的程序中使用。我遇到的问题是,我似乎无法使函数工作。以下是我的代码:

int main(int argc, char *argv[]){
  char *test = "Testing";
  fputs(test, stdout);
  fputs(reverse_string(test), stdout);
}

char* reverse_string(char *str){
  char temp;
  size_t len = strlen(str) - 1;
  size_t i;
  size_t k = len;
  for(i = 0; i < (len +1)/2; i++){
    temp = str[k];
    str[k] = str[i];
    str[i] = temp;
    k--;
  }  
  return str;
}

不能将
常量字符*
传递给
字符*

char *test = "Testing";
fputs(reverse_string(test), ... // bad, attempting to change constant data.
// bad as  reverse_string() is assumed to return int, but fputs() expects char *

char* reverse_string(char *str) { // Bad, there's now a function conflict
反而

char* reverse_string(char *str);  // Need to declare/define function first

char test[] = "Testing";
fputs(reverse_string(test), ... // good
[编辑]
其他人很好地识别了您的问题(缺少函数声明)。我的建议解决了下一个问题。在C语言中,函数的缺失声明将假定
int reverse\u string(…)
char*reverse\u string(char*str)
不匹配

[编辑]
正如@Shafik Yaghmou所建议的,修改字符串文字
char*test=“Testing”
将导致未定义的行为。因此,
char test[]=“Testing”
用“Testing\0”初始化
test
,但可以修改

[编辑]
@GreenAsJade正确指出OP的原始错误消息是由于假定
int reverse_字符串(…)
int fputs(const char*s,FILE*stream)中向
s
提供
int

char*test1=“Testing”
char test2[]=“Testing”
不同
test1
变成一个指针大小的
char*
。初始指针值指向内存中其他位置的字符串“Testing”
test2
是一个
char
数组,大小为8:长度为“\0”的“Testing”+1。数组
test2
初始化为'T','e','\0'等

FWIW:

(h2hh)momerath:Documents mgregory$ cat test.c
char* reverse_string(char *str) {
  return str;
}

char *test = "Testing";

int main() {

  reverse_string(test);
}
(h2hh)momerath:Documents mgregory$ gcc test.c
(h2hh)momerath:Documents mgregory$ 

我认为OP问题的答案是,在使用reverse\u字符串之前必须声明它不是int。

您可能需要将reverse\u字符串置于main之上或声明它。编译器可能在假设函数的某些方面。如果我使用main上面声明的reverse_字符串运行同一个程序,我仍然会遇到分段错误。@DannyDyla as chux和我在他的回答中提到,你不能修改字符串文字。+1你还应该提到正向声明
反向字符串
,并且提到修改字符串文字是未定义的会有帮助。你的回答让我大吃一惊。我仍然不明白,因为您的第一个代码块编译得很好(在您将反向_字符串(test)调用放入main()之后)。我认为现在删除的关于预扣税的答案是正确的!我的印象是
char*test=“Testing”
char test[]=“Testing”
是一样的。这不是真的吗?我也在想同样的事情。我不知道c对康斯特内斯如此挑剔。。。我把它看作是一个C++的东西。不过,我已经很久没有动手做c编程了!(这就是我喜欢阅读这些内容的原因!)@DannyDyla请查看我对的答案。感谢您的输入-当另一个答案(现已删除)出现时,我也看到了其他代码问题。
(h2hh)momerath:Documents mgregory$ cat test.c
char* reverse_string(char *str) {
  return str;
}

char *test = "Testing";

int main() {

  reverse_string(test);
}
(h2hh)momerath:Documents mgregory$ gcc test.c
(h2hh)momerath:Documents mgregory$