c - 尽管小于长度,但 C 字符串索引上的分段错误
问题描述
我的代码中 cstr 的长度是来自 strlen() 的 3。我正在对 cstr 的索引 0 进行取消引用,但它在该行(第 34 行)上给了我一个分段错误。我真的很困惑。有人可以解释为什么会这样吗?
#include <stdio.h>
#include <string.h>
char *reverse_words(char *cstr);
int main() {
char *ex = "cat";
printf("%s", reverse_words(ex));
return 0;
}
char *reverse_words(char *cstr) {
int len = strlen(cstr);
int s_len = 0;
int s_len_prev = 0;
while (s_len < len) {
while (cstr[s_len] != 32 && s_len < len) {
s_len++;
}
printf("len: %d\n", len);
printf("s_len: %d\n", s_len);
for (int i = s_len_prev; i < s_len; i++) {
printf("%d\n", i);
if (i == (s_len / 2)) {
break;
}
char temp1 = cstr[i];
char temp2 = *(cstr + s_len - i - 1);
printf("*(cstr + i): %c\n", cstr[i]);
printf("*(cstr + s_len - i - 1): %c\n", *(cstr + s_len - i - 1));
printf("s_len - i - 1: %d\n", s_len - i - 1);
printf("len: %d\n", len);
*(cstr + i) = temp2;
*(cstr + s_len - i - 1) = temp1;
}
s_len++;
s_len_prev = s_len;
}
return cstr;
}
输出:
len: 3
s_len: 3
0
*(cstr + i): c
*(cstr + s_len - i - 1): t
s_len - i - 1: 2
len: 3
Segmentation fault (core dumped)
解决方案
您ex
指向一个常量(称为“字符串文字”)。然后你尝试修改ex
指向的东西。但是你不能修改常量——这就是使它们成为常量的原因。
推荐阅读
- javascript - 无法将属性添加到函数内的对象
- excel - VBA代码打开文件夹中的所有excel文件并将数据复制到单个excel文件
- python - Hootsuite 的授权 URL 不起作用
- amazon-sqs - Spring @SqsListener - 获取队列名称
- terraform - 释放 github 操作设置的 Terraform 锁
- visual-studio-code - 安装 VS 代码扩展的厨师食谱
- javascript - 如何将 Promise 上下文中未捕获的错误传播到 window.onerror?
- python - 有没有办法在 mplstyle 文件中更改颜色名称的颜色?
- ios - 如何使用 swift 将 Facebook SDK 和分析添加到应用程序
- python - scipy.optimize.dual_annealing 调用的函数总数