c - 当反向字符串的函数返回地址时,我无法打印元素

标签 c string pointers

我最近正在编写一个函数来反转字符串输入。 例如,输入=“你好”,然后输出=“olleh” 我有一个问题,当我返回 char* 的地址时,它看起来很好,但为什么我不能打印那个指针的字符串?

首先非常感谢,这是我的代码:

#include <stdlib.h>
#include <stdio.h>

char* reverseString(char*);

int main(void)
{
    char* s = "hello";
    char* out;

    out = reverseString(s);

    printf("%p %s\n", out, out);
    return 0;
}

char* reverseString(char* s)
{
    int i;
    int size;
    char* reverse;

    size = sizeof(s);
    char reversechar[size];

    for (i = 1; i < size + 1; i++)
        reversechar[i - 1] = s[size - i];

    reverse = reversechar;
    //printf("%p\n",reverse);
    return reverse;
}

结果: 0x7fff40db7300 @@

最佳答案

不要在函数内部分配 reversechar。当函数返回时它将超出范围(即不再有效访问它)。而是在 main 中分配它并传递一个指向该函数的指针。像这样的东西:

 #include <stdio.h>
 #include <stdlib.h>

 void reverseString(char* dst, char* s)
 {
    int i;
    int size;

    size = strlen(s);

    for(i = 0; i < size; i++)
      dst[i] = s[size-1-i];

    // Terminate the string
    dst[size] = 0;

 }

 int main(void)
 {
    char* s = "hello";
    char out[strlen(s)+1];

    reverseString(out, s);

    printf("%p %s\n",out,out);

    return 0;
 }

将此与 strcpymemcpy 等函数进行比较。他们不会为你分配内存。它们要求您提供源指针和目标指针。

关于c - 当反向字符串的函数返回地址时,我无法打印元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965437/

相关文章:

c++ - 从 C++ 中未解析的外部调用 C 函数

c# - Windows 后台服务可根据需要按名称终止进程

c - 对大页面使用 mmap 和 madvise

c - 指针和字符串操作

java - java中的字符串替换,类似于速度模板

c - void* 数组上的交换无法正常工作

c - 我对字符串的理解有什么问题,即在 C 编程中以 '\0' 元素结尾的字符数组

c - 释放指针会使我的程序崩溃

将 char** 转换为 char* 或 char

c++ - 为什么没有从指针到对 const 指针的引用的隐式转换