我最近写了一个函数来反转字符串输入。 例如,输入=" hello",然后输出=" olleh" 我有一个问题,当我返回char *的地址时,它看起来很好,但为什么我不能打印那个指针的字符串?
首先非常感谢,这是我的代码:
//h2[a[@title='Sony Xperia']]
/following-sibling::div[@class='actions']
/ul/li/a[text()='Add to Compare']
结果: 0x7fff40db7300 @@
答案 0 :(得分:2)
不要在函数内部分配Error in as.POSIXct.default(as.character(df$V3), tz = "UTC", format = "%Y-%m-%d %H:%M:%S") :
do not know how to convert 'as.character(df$V3)' to class “POSIXct”
。当函数返回时它将超出范围(即它不再有效访问它)。而是在main中分配它并传递指向该函数的指针。类似的东西:
reversechar
将此与 #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
等功能进行比较。他们不为你分配内存。它们要求您同时提供源指针和目标指针。
答案 1 :(得分:1)
代码中有几件事情:
- 您尝试返回一个指向具有自动存储持续时间的数组的指针,如果您使用它,则会调用Undefined Behavior。
- 尝试打印指针时,将(void *)
强制转换为它。
- 使用strlen()
函数获取字符串的长度,而不是sizeof
operator`。
您应该在函数内部使用malloc()
动态分配数组,并在完成后将其释放。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* reverseString(char*);
int main(void)
{
char* s = "hello";
char* out;
out = reverseString(s);
printf("%p %s\n", (void *)out, out);
free(out);
return 0;
}
char* reverseString(char* s)
{
char *reverse;
size_t i, size;
size = strlen(s);
char *reversechar = malloc(size + 1);
for (i = 1; i < size + 1; i++)
reversechar[i - 1] = s[size - i];
reverse = reversechar;
//printf("%p\n",reverse);
return reverse;
}
答案 2 :(得分:0)
#include <string.h> // for strlen
char* reverseString(char* s)
{
int i;
int size;
char* reverse;
// size = sizeof(s);
// char reversechar[size];
// ↓
size = strlen(s);
char* reversechar = calloc(size + 1, sizeof(char)); // memory allocation and zero-initialization
for (i = 1; i < size + 1; i++)
reversechar[i - 1] = s[size - i];
reverse = reversechar;
//printf("%p\n",reverse);
return reverse; // it is necessary that return value is freed by the caller
}
1. size of string char* s = "hello world"; Address(64bit) h e l l o w o r l d /0 0x00007FFF40DB7300:68 65 6c 6c 6f 20 77 6f 72 6c 64 00 s・・・0x00007FFF40DB7300 sizeof(s)・・・8 (64bit) strlen(s)・・・11 (string length) In the case of 「char s[] = "hello world";」 sizeof(s)・・・12 (allocation size) 2. initialization char buf[5]; 0x0000xxxxx22DD100:CD CD CD CD CD (5bytes) char* buf = malloc(5); 0x0000xxxxx8212A00:CD CD CD CD CD (5bytes) char* buf = calloc(5 * sizeof(char)); 0x0000xxxxx55A6600:00 00 00 00 00 (5bytes)(zero-values)