我需要找到一种方法来使用C
中的指针来反转字符串。我不应该使用数组表示法或字符串库函数。
这是我目前的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
//Reverse2
char *forward = "123";
char *back = malloc(sizeof(char) * 4);
reverse2(forward, back);
return 0;
}
void reverse2(char *string, char *string2) {
int counter = 0;
char *string1 = string;
while (*string1) {
counter += 1;
string1 += 1;
}
string1--;
int i;
for (i = 0; i <= counter; i++) {
*string2 = *string1;
string2 += 1;
string1--;
}
printf("%s", string2);
}
这是我在ideone
中运行时出现的错误:
Compilation error #stdin compilation error #stdout 0s 0KB
prog.c:8:2: warning: implicit declaration of function 'reverse2' is invalid in C99 [-Wimplicit-function-declaration]
reverse2(forward, back);
^
prog.c:41:6: error: conflicting types for 'reverse2'
void reverse2(char* string, char* string2){
^
prog.c:8:2: note: previous implicit declaration is here
reverse2(forward, back);
^
1 warning and 1 error generated.
答案 0 :(得分:4)
您的编译错误是由于您在reverse2
中调用main
,但C编译器不知道 中的 main
reverse2
尚未 ,因为 后定义了 <{1}} reverse2
。 (C编译器必须能够以流方式编译.c文件,因此这意味着编译某些东西所需的一切 - 如函数 - 必须事先定义)
如果你颠倒了两个函数的顺序(即你将main
放在reverse2
之前),或者添加这个声明:
main
在void reverse2(char*, char*);
之前,那个错误不会发生。
(我没有检查过你的代码,所以我不知道它是否符合你的要求,但你的问题是关于编译错误:不是代码是否实际反转了字符串)
答案 1 :(得分:3)
1 - prog.c:8:2:警告:C99中函数'reverse2'的隐式声明无效[-Wimplicit-function-declaration] reverse2(前进,后退);
此错误是因为您需要在主要尝试调用之前定义reverse2()
,只需在reverse2()
的代码之前移动main()
的代码。
2 - 您需要在reverse2()
for (i = 0; i <= counter; i++) {
*string2 = *string1;
string2 += 1;
string1--;
}
*string2 = '\0';
3 - 尝试在string2
中打印reverse2()
并不好,因为它指向字符串的结尾。在back
中打印main()
,您将看到预期的结果。
reverse2(forward, back);
printf("%s", back);
答案 2 :(得分:1)
要阻止这些有用的警告,您应该在从reverse2
调用main()
之前声明或定义reverse2
函数。
此外,string2
未在目标字符串中设置空终止符,并且根本不打印反转字符串,因为指针reverse2
已前进到反转字符串的末尾。
除非指定原型,否则应考虑在#include <stdio.h>
#include <stdlib.h>
char *reverse2(const char *src) {
const char *p = src;
char *dest, *q;
while (*p) {
p++;
}
dest = malloc(p - src + 1);
if (dest != NULL) {
q = dest;
while (p > src) {
*q++ = *--p;
}
*q = '\0';
}
return dest;
}
int main(void) {
const char *forward = "123";
char *back = reverse2(forward);
printf("%s\n", back);
free(back);
return 0;
}
中为反转字符串分配空间并返回指针:
以下是修改后的版本:
{{1}}