C '的冲突类型;反向#u字符串';功能
我在一个需要反转字符串的程序中使用。我遇到的问题是,我似乎无法使函数工作。以下是我的代码:C '的冲突类型;反向#u字符串';功能,c,string,C,String,我在一个需要反转字符串的程序中使用。我遇到的问题是,我似乎无法使函数工作。以下是我的代码: 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;
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;
}
不能将
常量字符*
传递给字符*
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\u string(…)
与char*reverse\u string(char*str)
不匹配
[编辑]正如@Shafik Yaghmou所建议的,修改字符串文字
char*test=“Testing”
将导致未定义的行为。因此,char test[]=“Testing”
用“Testing\0”初始化test
,但可以修改
[编辑]@GreenAsJade正确指出OP的原始错误消息是由于假定
int reverse_字符串(…)
在int fputs(const char*s,FILE*stream)中向s
提供int
代码>
char*test1=“Testing”
与char test2[]=“Testing”
不同test1
变成一个指针大小的char*
。初始指针值指向内存中其他位置的字符串“Testing”test2
是一个char
数组,大小为8:长度为“\0”的“Testing”+1。数组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\u字符串之前必须声明它不是int。您可能需要将reverse\u字符串置于main之上或声明它。编译器可能在假设函数的某些方面。如果我使用main上面声明的reverse_字符串运行同一个程序,我仍然会遇到分段错误。@DannyDyla as chux和我在他的回答中提到,你不能修改字符串文字。+1你还应该提到正向声明反向字符串
,并且提到修改字符串文字是未定义的会有帮助。你的回答让我大吃一惊。我仍然不明白,因为您的第一个代码块编译得很好(在您将反向_字符串(test)调用放入main()之后)。我认为现在删除的关于预扣税的答案是正确的!我的印象是char*test=“Testing”
与char test[]=“Testing”
是一样的。这不是真的吗?我也在想同样的事情。我不知道c对康斯特内斯如此挑剔。。。我把它看作是一个C++的东西。不过,我已经很久没有动手做c编程了!(这就是我喜欢阅读这些内容的原因!)@DannyDyla请查看我对的答案。感谢您的输入-当另一个答案(现已删除)出现时,我也看到了其他代码问题。
(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$