【发布时间】:2015-02-15 16:44:40
【问题描述】:
我确实调试了程序,当我执行 a[k] = a[h] 时,确实出现了分段错误。 数组a是一个动态数组,所以我不明白问题出在哪里...... 你能帮帮我吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Invert(char* a, int k, int h) {
if(k < h) {
char app;
app = a[k];
a[k] = a[h]; //here is the error
a[h] = app;
Invert(a,k+1,h-1);
}
}
void CallInvert(char* a, char k) {
int n = strlen(a);
Invert(a, k, n-1);
}
int main(int argc, char *argv[]) {
char *a; int k,i;
a = malloc(sizeof(char)*sizeof("Hi, how are you?"));
a = "Hi, how are you?";
k = 5;
if(k>=strlen(a)) {
printf("ERROR");
return 0;
}
printf("Before: \"%s\"\n", a);
CallInvert(a,k);
printf("After: \"%s\"\n",a);
free(a);
return 0;
}
【问题讨论】:
-
a = "Hi, how are you?";-->strcpy(a, "Hi, how are you?"); -
sizeof("Hi, how are you?")这是错误的,而不是sizeof所做的。如果您需要字符串的长度,请使用strlen。你也不能像这里a = "Hi, how are you?";那样分配字符串 -
但是如果一个do
malloc = strlen("Hi, how are you")*sizeof(char)),它会忽略一个字符串最后一个字符的位置, '\0'。
标签: c arrays segmentation-fault malloc