【发布时间】:2012-09-20 11:47:15
【问题描述】:
我想为以空结尾的char* 字符串(以空结尾的字符字符串,是多余的吗?)实现反向函数,并提出了以下解决方案。
反向函数中的最终交换swap(&tmp, &str) 没有任何效果。什么原因,大概是怎么做的?
备注:我已经重新实现了 reverse 函数,只使用字符串本身、临时字符和索引,但我很感兴趣为什么这不起作用。在这个指针中我没有考虑什么?
#include <stdlib.h>
#include <stdio.h>
int strlen(char* str)
{
int len = 0;
char* ptr = str;
while (ptr[0] != '\0')
{
len++;
ptr++;
}
return len;
}
void swap(char **a, char **b)
{
char* c = *a;
*a = *b;
*b = c;
}
void reverse(char* str)
{
int len = strlen(str);
char* tmp = malloc(sizeof(char) * (len + 1));
int i;
for (i = 0; i < len; i++)
{
tmp[i] = str[len - 1 - i];
}
tmp[len] = '\0';
// printf(tmp); => "wolfrevOkcatS olleH"
swap(&tmp, &str);
}
int main(int argc, char** argv)
{
char* str = "Hello Stackoverflow\0";
reverse(str);
printf("%s", str);
return 0;
}
【问题讨论】:
-
您不需要在字符串末尾添加尾随 '\0'。这是在使用
"String"时隐含的(例如运行sizeof("A")) -
@mnunberg 是的,但是在
reverse函数中添加空字符是正确的[必需?]