我正在使用这个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;
}
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误 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);
}
Run Code Online (Sandbox Code Playgroud)
你不能传递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
Run Code Online (Sandbox Code Playgroud)
代替
char* reverse_string(char *str); // Need to declare/define function first
char test[] = "Testing";
fputs(reverse_string(test), ... // good
Run Code Online (Sandbox Code Playgroud)
[编辑]
你的问题被其他人很好地识别(缺少函数声明).我的建议处理下一个问题.在C中,函数的缺失声明将假定 int reverse_string(...)哪个不匹配char* reverse_string(char *str).
[编辑]
正如@Shafik Yaghmou所说,修改字符串文字char *test = "Testing"将导致未定义的行为.因此char test[] = "Testing",test使用"Testing\0" 初始化,但可以修改.
[编辑]
@GreenAsJade正确地指出OP的原始的错误消息是由于假定int reverse_string(...)供给int到s在int fputs(const char * s, FILE * stream);
char *test1 = "Testing"与...不是一回事char test2[] = "Testing". test1变成char *一个指针的大小.初始指针值是位于内存中其他位置的字符串"Testing". test2是一个char大小为8 的数组:长度为"Testing"+ 1为'\ 0'.数组test2初始化为'T','e',...'\ 0'等.
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |