我有一个指向数组的简单指针,我想要反转该数组,这是我写的代码:
void str_reverse(char *s) {
int l, r;
l = 0;
r = str_len(s) - 1;
char temp;
printf("length %i ", r);
while (l <= r) {
temp = *(s + l);
printf("\n%c [%i] | %c [%i]\n", temp, l, *(s + r), r);
*(s + l) = *(s + r);
*(s + r) = temp;
r--;
l++;
}
}
你可以看到我使用这个功能:
int str_len(char *p) {
int l = 0;
while (*(p + l) != '\0') {
// printf("%c %i", *(p + l),l);
l++;
}
return l;
}
我命令得到我的数组的长度,这是我的小主要
int main() {
char *s = "Hallo world!";
str_reverse(s);
return 0;
}
这是输出:
length 10
H [0] | d [10]
Bus error: 10
现在我尝试只打印值,所以在str_reverse的while循环中我评论了这两行:
*(s + l) = *(s + r);
*(s + r) = temp;
这是输出:
H [0] | ! [11]
a [1] | d [10]
l [2] | l [9]
l [3] | r [8]
o [4] | o [7]
[5] | w [6]
那很好!但我怎么能存储它们?提前谢谢
答案 0 :(得分:2)
问题在于main
,s
指向字符串文字。这些文字通常存储在只读存储器中,因此无法修改它们。
将s
更改为使用字符串文字初始化的数组,它将起作用。
char s[] = "Hallo world!";
使用动态分配的内存也可以:
#include <stdlib.h>
#include <string.h>
...
char *s = strdup("Hallo world!");
str_reverse(s);
free(s);