c - 使用指针反转 C 中的字符串

标签 c string pointers

我需要找到一种在 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.

最佳答案

你的编译错误是因为你调用了reverse2main ,但 C 编译器不知道内部 main什么reverse2 因为reverse2 之后定义 main . (C 编译器必须能够以流式方式编译 .c 文件,因此这意味着编译某些东西所需的一切 - 如函数 - 必须事先定义)

如果您颠倒这两个函数的顺序(即您将 reverse2 放在 main 之前),或者添加此声明:

void reverse2(char*, char*);

之前main()那么该错误就不会发生。

(我没有检查你的代码,所以我不知道它是否做了你想要它做的,但你的问题是关于编译错误:不是代码是否真的反转了字符串)

关于c - 使用指针反转 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50031360/

相关文章:

c - icu unicode 中是否有等效的 strdup ?

c - Linux 共享内存同步

Javascript字符串用括号替换短标签

java - java中单词之间添加空格并使每个单词除了第一个小写之外

c++ - 表达式必须是可修改的左值 - 结构中的数组

C++ 指针类型和引用调用

C - 如何同时使用 aio_read() 和 aio_write()

Python:pickle 派生的 str 对象

c - 仅 Malloc 低 32 位地址

c - 在 Unix 中使用 fchmod