我正在编写一个小程序来排序字符串矩阵。在排序算法中,我使用此函数交换两个字符串,但在相同情况下,程序会崩溃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);
}