我使用this SO question作为需要反转字符串的程序的一部分。我遇到的问题是,我似乎无法使这个功能发挥作用。下面是我的代码:
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的回答以获得解释。
#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);
}发布于 2014-01-10 03:31:29
不能将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建议的那样,修改字符串文本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‘等等。
发布于 2014-01-10 03:42:23
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。
https://stackoverflow.com/questions/21035708
复制相似问题