反转不在MinGW中运行的字符串
Reverse a string not running in MinGW
我已经编写了代码来反转字符串。我认为逻辑是正确的。我可以编译它,但无法运行它。我正在尝试在windows上使用MinGW。有人能指出问题是什么吗?
void reverse(char * start, char * end){
char ch;
while(start != end){
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
int main(){
char *c = (char *)"Career";
int length = strlen(c);
reverse(c,c+length-1);
}
谢谢
你正在传递一个文字给你的函数,并且试图修改文字是未定义的行为。
创建一个像这样的可修改字符串:
char c[] = "Career";
最重要的是,reverse
仅在字符串中有奇数个字符时起作用。你的while
条件是错误的。应该是:
while(start < end)
你的代码说:
while(start != end)
,如果您的字符串有偶数个字符,则该条件始终为真。由于start
和end
指向输入字符串之外,因此循环直到您得到分割故障。
不能更改字符串字面值,因为它位于只读内存中。
尝试将c
声明为char c[] = "Career";
您的代码无法编译的原因是您需要添加
#include <string.h>
放到文件的顶部,以定义strlen
函数。
while(start != end){
生成
Segmentation fault (core dumped)
对于偶数个字符长的字符串错误。
更改为
while(start < end){
,错误就会消失。
这是一个完整的工作版本:
#include <stdio.h>
#include <string.h>
void reverse(char * start, char * end){
char ch;
while(start < end){
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
int main(){
char c[] = "Career";
int length = strlen(c);
reverse(c,c+length-1);
printf("c=%sn", c);
}
相关文章:
- 字符串函数在目标C++上运行时C++返回空
- 重新运行程序和字符串流?
- 在 c++ 中将集合转换为向量和向量转换为字符串时出现运行时异常
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 如何创建一个模板化函数,可以在任何具有字符串键的 std::map 上运行?
- 为什么字符串类型会导致 c++ 程序无法运行?
- 将字符串指针传递到C++和Xcode 11.1中不同线程上运行的函数
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 如何修复我的字符串以避免运行时错误?
- 从C++代码中以字符串形式运行多行 bash 脚本
- 字符串::插入产生运行时错误
- C++字数统计程序使用C字符串错误在程序运行后
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- Leetcode:为什么在提交和运行代码上,字符串类的“at”方法的行为不同
- *char数组到字符串(两次运行代码和两个不同的结果)
- 在不使用容器或字符串库的情况下,在运行时增加动态数组大小
- 删除指向排序的字符串阵列的指针会在运行后会有一个错误
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- 触发Java Jar用C 运行并传递字符串
- 如何使用调整后的字符串索引第二次通过循环运行字符串