有人发布了这个最近的问题。这是链接:
Output sorted in a weird way
我知道这是怎么回事,但我想弄清楚的是,为什么它按原样产生输出?
将getch()
更改为getchar()
后,我编译了它并运行了几次。它总是会改变first 4 letters
。我无法看到where
这种变化实际上发生在代码中
任何帮助将不胜感激。
答案 0 :(得分:3)
这发生在swap
函数:
//swapping function
void swap(char **first, char **second)
...
OP假设'char *'是一个整数类型,移动它会移动字符串。第二部分是这个交换函数应该接受指针到数据,而不是实际数据。它交换数据的地址,不会触及数据本身。
然而,当使用char * *
调用时,它会出错。这会将数据交换到'指向'的地址。但是输入不是“指向指针”的指针。
'Pointer to'在大多数系统上都有sizeof int
(其中'most'是主观评估 - 搜索“sizeof指针”用于讨论和观点)。因此,此例程不会将字符串或交换为指向字符串的指针,而是将整数交换到目标地址。由于整数是根据结果在OP的机器上长4个字节,因此代码“交换”目标字符串的前四个字节。
答案 1 :(得分:1)
更改发生在OP帖子中的错误功能swap()
中
Output sorted in a weird way
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
}