最近有人发布了这个问题。这是链接:
输出以一种奇怪的方式排序
我知道这是怎么回事,但我想弄清楚的是,为什么它会按原样产生输出?
更改getch()
为后,getchar()
我对其进行了编译并运行了几次。它总是在变化first 4 letters
。我看不到where
这种变化实际上发生在代码中。
任何帮助将不胜感激。
最近有人发布了这个问题。这是链接:
输出以一种奇怪的方式排序
我知道这是怎么回事,但我想弄清楚的是,为什么它会按原样产生输出?
更改getch()
为后,getchar()
我对其进行了编译并运行了几次。它总是在变化first 4 letters
。我看不到where
这种变化实际上发生在代码中。
任何帮助将不胜感激。
这发生在swap
函数中:
//swapping function
void swap(char **first, char **second)
...
OP假设'char *'是一个整数类型,移动它会移动字符串。第二部分是这个交换函数应该接受指向数据的指针,而不是实际的数据。它交换数据的地址并且不接触数据本身。
但是,当用 调用时char * *
,它会出错。这会在“指向”的地址处交换数据。但是输入不是“指向指针的指针”。
'Pointer to'sizeof int
在大多数系统上都有一个(其中'most' 是一种主观评估——搜索“sizeof pointer”以获取讨论和意见)。因此,此例程交换的不是字符串或指向字符串的指针,而是交换目标地址处的整数。根据结果,由于整数在 OP 的机器上是 4 个字节长,因此代码“交换”了目标字符串的前四个字节。
swap()
OP帖子
中的错误功能发生变化输出以一种奇怪的方式排序
char *temp;
...
void swap(char **first, char **second) {
temp = *second; // Copy 4-byte pointer
*second = *first;// Copy 4-byte pointer
*first = temp; // Copy 4-byte pointer
}