【发布时间】:2013-12-22 20:57:23
【问题描述】:
我写了一个反转字符串的简单函数。我尝试不使用 char* 末尾的最后一个字符 '\0' 为交换分配临时字符。但是,它会在 *end = *str; 处报告分段错误;
谁能解释原因?
非常感谢!
#include<stdio.h>
#include<stdlib.h>
void reverse(char* str)
{
char* end = str;
char* i = str;
char* j = str;
while(*end)
++end;
j = end;
*end = *str;
while(j > i)
{
*i = *j;
++i;
*j = *i;
++j;
}
while(i < end)
{
*i = *(i+1);
++i;
}
*i = '\0';
}
void main(int argc, char* argv[])
{
char* str_test1;
char* str_test2;
str_test1 = (char*) malloc(10);
str_test2 = (char*) malloc(2);
str_test1 = "abcdefjhi";
str_test2 = "a";
printf("input str1=%s, str2=%s", str_test1, str_test2);
reverse(str_test1);
reverse(str_test2);
printf("output str=%s, str2=%s", str_test1, str_test2);
free(str_test1);
free(str_test2);
}
[在我将代码更改为以下之后,它可以工作。]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse(char* str)
{
char* end = str;
char* i = str;
char* j = str;
while(*end)
++end;
j = end;
*end = *str;
**--j;**
while(j > i)
{
*i = *j;
++i;
*j = *i;
**--j;**
}
while(i < end)
{
*i = *(i+1);
++i;
}
*i = '\0';
}
void main(int argc, char* argv[])
{
char* str_test1;
char* str_test2;
str_test1 = (char*) malloc(10);
str_test2 = (char*) malloc(2);
strcpy(str_test1, "abcdefjhi");
strcpy(str_test2,"a");
printf("input str1=%s, str2=%s\n", str_test1, str_test2);
reverse(str_test1);
reverse(str_test2);
printf("output str=%s, str2=%s\n", str_test1, str_test2);
free(str_test1);
free(str_test2);
}
【问题讨论】:
-
你正在做这一切,只是为了你没有临时变量?
-
如果一个字符串比另一个长,你在哪里分配额外空间?
-
大家好,我刚刚添加了我的 main 函数,我在其中调用了一个字符串的 reverse(char *) 函数。
-
str_test1 = "abcdefjhi"; str_test2 = "a";你这里有内存泄漏 -
@triclosan 你能解释一下吗?
标签: c