我最近正在编写一个函数来反转字符串输入。 例如,输入=“你好”,然后输出=“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;
}
将此与 strcpy
和 memcpy
等函数进行比较。他们不会为你分配内存。它们要求您提供源指针和目标指针。
关于c - 当反向字符串的函数返回地址时,我无法打印元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965437/