我正在尝试创建一个非递归方法来交换c风格的字符串.它在Swap方法中抛出异常.无法弄清楚问题.
void Swap(char *a, char* b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
}
void Reverse_String(char * str, int length)
{
for(int i=0 ; i <= length/2; i++) //do till the middle
{
Swap(str+i, str+length - i);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我知道有更好的方法来做到这一点.但是因为我正在学习,想知道代码的问题.
它在Swap方法中抛出异常.无法弄清楚问题.
不,不.创建临时字符并分配字符不可能抛出异常.但是,如果您的指针未指向您拥有的内存块,则可能存在访问冲突.
该Reverse_String()函数看起来没问题,假设str指向至少length可写内存的字节.你的问题没有足够的背景来推断过去.我怀疑你传递的是无效参数.您需要说明您如何呼叫Reverse_String()我们以确定呼叫是否有效.
如果你写的是这样的:
char * str = "Foo";
Reverse_String(str, 3);
printf("Reversed: '%s'.\n", str);
Run Code Online (Sandbox Code Playgroud)
然后你肯定会得到一个访问冲突,因为str指向只读内存.请尝试以下语法:
char str[] = "Foo";
Reverse_String(str, 3);
printf("Reversed: '%s'.\n", str);
Run Code Online (Sandbox Code Playgroud)
这实际上会将"Foo"字符串的副本复制到可以覆盖的本地缓冲区中.