我已经在 GDB 中验证了程序在 *(a) = *(b) 行上崩溃了。这对我来说没有意义。
在我的主函数中,我为 char* 字符串分配了 5 个字节。我将两个指针传递给交换,一个是由 sizeof(char) 偏移的字符串,另一个是指向字符串的指针。这些指针被复制到 swap() 的调用堆栈。我之前分配的 5 个字节应该仍然在堆栈上,所以 swap() 在取消引用和写入堆栈上的这些位置时应该没有问题,对吧?
int main(int argc, char* argv[])
{
char *string = "abcd";
swap((string+1), string);
printf("%s\n",string);
return 0;
}
void swap(char *a, char *b)
{
if(!a || !b)
return;
char temp = *(a);
*(a) = *(b);
*(b) = temp;
}