首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“reverse_string”函数的冲突类型

“reverse_string”函数的冲突类型
EN

Stack Overflow用户
提问于 2014-01-10 03:29:15
回答 2查看 1K关注 0票数 3

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

代码语言:javascript
复制
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;
}

我收到了一个错误,就是有conflicting types for 'reverse_string'

编辑:对于任何想知道以下代码的人来说,这是可行的。请参阅@chux的回答以获得解释。

代码语言:javascript
复制
#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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 03:31:29

不能将const char *传递给char *

代码语言:javascript
复制
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

相反,

代码语言:javascript
复制
char* reverse_string(char *str);  // Need to declare/define function first

char test[] = "Testing";
fputs(reverse_string(test), ... // good

编辑

您的问题已被其他人很好地识别(缺少函数声明)。我的建议解决了下一个问题。在C中,缺少的函数声明将假定int reverse_string(...)char* reverse_string(char *str)不匹配。

编辑

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

编辑

@GreenAsJade正确地指出OP的原始错误消息是由于假定的int reverse_string(...)int fputs(const char * s, FILE * stream);中的s提供一个int

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

票数 6
EN

Stack Overflow用户

发布于 2014-01-10 03:42:23

FWIW:

代码语言:javascript
复制
(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_string之前必须声明它,而不是int。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21035708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档