我正在使用冒泡排序对数组按字母顺序排序,同时应用指针到指针的概念。当我使用 strcpy 函数使用指向指针 **p[4] 的指针交换数组 *b[4] 的地址时,我的程序崩溃了,除此之外,程序运行正常。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[][10]={"milk","eggs","bread","cheese"};
char *b[4],**p[4],*temp;
int length[4];
int i,j;
for(i=0;i<4;i++)
{
length[i]=strlen(a[i]);
b[i]=(char *)calloc(length[i],sizeof(char));
strcpy(b[i],a[i]);
p[i]=&b[i];
}
for(j=0;j<4;j++)
{
for(i=0; i<3-j; i++)
{
if(strcmp(*p[i],*p[i+1])>0)
{ /*
strcpy(temp,*p[i]); This is the part of the code where the
strcpy(*p[i],*p[i+1]); program crashes, can someone please point
strcpy(*p[i+1],temp); out the logical flaw
*/
}
}
}
for(i=0;i<4;i++)
{
puts(*p[i]);
}
}
最佳答案
程序崩溃的原因是您试图将 C 字符串的内容复制到未初始化的指针 temp
中,从而导致未定义的行为。
即使您通过为 temp
提供适当长度的缓冲区来解决此问题,在将较长字符串复制到为较短字符串分配的空间中时,您也会遇到未定义的行为(例如,当复制 "cheese "
进入为“eggs”分配的空间
)。此外,您当前的实现目前也有未定义的行为,因为它无法分配足够的空间来容纳字符串的空终止符。
解决此问题的正确方法是交换指针,而不是使用它们来复制内容。
关于c - 使用指针到指针概念应用冒泡排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47143733/