C语言 分段错误,大小为字符串的维度



我正在编写一个小程序来排序字符串矩阵。在排序算法中,我使用此函数交换两个字符串,但在相同情况下,程序会崩溃Segmentation Fault Error。我知道这是由我如何初始化temp string引起的,但我不明白为什么。

void stringSwap(char*string1,char*string2)
{   const int dim=sizeof(string1);
    char temp[dim];
    strcpy(temp,string1);
    strcpy(string1,string2);
    strcpy(string2,temp);
}

有人可以解释我为什么它会给出此错误吗?有没有另一种模式可以在不使用我实际上不知道的 dinamic 分配的情况下正确完成这件事?谢谢!

sizeof(string1)

4 或 8 个字节,具体取决于您的系统。

您应该改用strlen(string1)+1

string1是一个指针(不是数组,即使数组被衰减成指针),并且某个指针sizeof是固定的(它通常是以字节为单位的字大小,例如32位机器上的4字节,64位机器和系统上的8字节)。

某个指针sizeof是一个编译时常量,不依赖于该指针的值。

此语句

const int dim=sizeof(string1);

将返回指向sizeof( char * )字符的指针的大小。它通常等于 4 或 8 个字节,具体取决于运行程序的平台。

我认为两个字符串的大小应该相同(它们可以有不同的实际长度,但大小应该相等),你必须将该大小传递给函数,否则这个交换函数就没有意义了。

尝试:

void stringSwap(char*string1,char*string2)
{   
    char temp[strlen(string1)+1];
    strcpy(temp,string1);
    strcpy(string1,string2);
    strcpy(string2,temp);
}

相关内容

  • 没有找到相关文章

最新更新