[英]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.