【发布时间】:2013-07-29 23:00:38
【问题描述】:
我已经在 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;
}
【问题讨论】:
-
这和你的问题无关,但是
*(a)括号过大,*a就够了。 -
我很困惑。你认为你在哪里为字符串分配了五个字节,这怎么不是字符串文字的使用?
-
@elchonon-edelson 我认为原始发帖人对
char*是什么的理解不正确,因为它的字节被复制到堆栈中,而不仅仅是一个char指针。