簡體   English   中英

'reverse_string'函數的沖突類型

[英]Conflicting types for 'reverse_string' function

我正在使用這個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;
}

我收到一個錯誤,即conflicting types for 'reverse_string'存在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);
}

你不能將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

代替

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 Yaghmou所建議的那樣,修改字符串文字char *test = "Testing"將導致未定義的行為。 因此char test[] = "Testing"用“Testing \\ 0”初始化test ,但可以修改。

[編輯]
@GreenAsJade正確地指出OP的原始錯誤消息是由於假定的int reverse_string(...)int fputs(const char * s, FILE * stream);s提供了一個int int fputs(const char * s, FILE * stream);

char *test1 = "Testing"char test2[] = "Testing" test1變成一個帶有指針大小的char * 初始指針值是位於內存中其他位置的字符串“Testing”。 test2是一個大小為8的char數組:長度為“Testing”+ 1為'\\ 0'。 數組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_string,而不是int。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM