gpt4 book ai didi

c - 使用指针到指针概念应用冒泡排序?

转载 作者:行者123 更新时间:2023-11-30 14:53:35 25 4
gpt4 key购买 nike

我正在使用冒泡排序对数组按字母顺序排序,同时应用指针到指针的概念。当我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com