【发布时间】:2018-01-01 11:05:11
【问题描述】:
我编写了一个小 C 程序来反转字符串。
尽管如此,我还是将str 声明为
字符 *str
然后str = (char*)malloc(20);
str = "this is a test";
但是,如果我使用 char str[20] = "this is a test"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char *a, char *b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
}
char* reverse(char *str)
{
int len = strlen(str);
printf("len = %d \t %s\n", len, str);
int i = 0;
if (len == 0)
return NULL;
for (i=0; i<len/2; i++)
{
swap((str+i), (str+len-1-i));
printf("%s\n", str);
}
return str;
}
int main(void)
{
char *str;
str = (char *)malloc(20);
str = "this is a test";
printf("%s\n", str);
reverse(str);
printf("%s\n", str);
return 0;
}
我的理解是,如果我声明,我将获得 SEGFAULT,char *str="This is a test" 因为它将是一个常量字符串。
所以,我想,当我 malloc 时,str 将从堆中分配,并且这两个函数都可以访问堆内存。但,
仍然出现 SEGFAULT 错误。
【问题讨论】:
-
str = (char*)malloc(20); 34 str = "this is a test";...LEAKKKKKKK -
str = "this is a test";-->strcpy(str, "this is a test"); -
您的编译器不会警告您将字符串字面量指针(即
char const *)分配给可修改的字符串指针(char *)的危险。您需要提高警告级别(或使用会警告您的编译器)。 -
下次不要在代码中添加行号,按原样发布代码。
标签: c arrays string char segmentation-fault