gpt4 book ai didi

C - strcpy() 处的段错误

转载 作者:行者123 更新时间:2023-11-30 20:09:50 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *vStrs[] = {"Max", "Moritz", "Bolte", "Hans Huckebein", "Helene", "Antonius", "Boeck", "Maecke", "Lempel", "Schlich"};

int main()
{
int num = sizeof(vStrs) / sizeof(vStrs[0]);
int len = sizeof(vStrs[0]);
char exchnge[len];
char vBuf[128];
char *ndata;
int i, j;

for(i=0; i<num-1; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(vStrs[j], vStrs[i]) < 0)
{
strcpy(exchnge, vStrs[j]);
strcpy(vStrs[j], vStrs[i]);
strcpy(vStrs[i], exchnge);
}
}
}

for(i=0; i<num; i++)
printf("%s\n", vStrs[i]);

return 0;
}

大家好,

有人知道为什么我在 strcpy(vStrs[j], vStrs[i]); 行出现段错误吗?

我有一个字符串数组,想要对其进行排序。但我遇到了段错误。上面的 strcpy() 函数有效。怎么了?

可能这是显而易见的,但我不明白。

谢谢!

最佳答案

使用strcpy(vStrs[j], vStrs[i]),您可以将一个字符串文字的内容复制到另一个字符串文字中。这就像您编写了 strcpy("Max","Moritz"),但不得修改字符串文字(其未定义的行为)。

无论如何,程序的目的是交换指向内容的指针,而不是内容本身。因此,如果您按如下方式更改程序,一切都应该没问题:

char *vStrs[] = {"Max", "Moritz", "Bolte", "Hans Huckebein", "Helene", "Antonius", "Boeck", "Maecke", "Lempel", "Schlich"};

int main()
{
int num = sizeof(vStrs) / sizeof(vStrs[0]);

for(int i=0; i<num-1; i++)
{
for(int j=i+1; j<num; j++)
{
if(strcmp(vStrs[j], vStrs[i]) < 0)
{
char *exchnge = vStrs[j];
vStrs[j] = vStrs[i];
vStrs[i] =exchnge;
}
}
}

for(int i=0; i<num; i++)
printf("%s\n", vStrs[i]);

return 0;
}

关于C - strcpy() 处的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48705900/

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