'reverse_string'函数的冲突类型

Dan*_*yla 3 c string

我正在使用这个SO问题作为需要反转字符串的程序的一部分.我遇到的问题是我似乎无法使功能发挥作用.这是我的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误 conflicting types for 'reverse_string'

编辑:对于任何想知道这里的人来说,代码是有效的.请参阅@ chux的答案以获得解释.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
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;
}
int main(int argc, char *argv[]){
  char test[] = "Testing";
  fputs(test, stdout);
  fputs(reverse_string(test), stdout);
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 6

你不能传递const char *char *

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
Run Code Online (Sandbox Code Playgroud)

代替

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

char test[] = "Testing";
fputs(reverse_string(test), ... // good
Run Code Online (Sandbox Code Playgroud)

[编辑]
你的问题被其他人很好地识别(缺少函数声明).我的建议处理下一个问题.在C中,函数的缺失声明将假定 int reverse_string(...)哪个不匹配char* reverse_string(char *str).

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

[编辑]
@GreenAsJade正确地指出OP的原始的错误消息是由于假定int reverse_string(...)供给intsint fputs(const char * s, FILE * stream);

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

  • @DannyDyla请参阅我的答案[数组和指向字符串文字的指针之间的区别](http://stackoverflow.com/q/20296674/1708801). (2认同)