我正在编写一个小程序来订购字符串矩阵。在排序算法中,我使用此函数交换两个字符串,但在相同的情况下,程序与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);
}
有人能解释一下为什么会出现这个错误吗?还有另一种方式可以正确地做这件事而不使用我实际上不知道的动态分配吗?非常感谢你!
答案 0 :(得分:3)
string1
是一个指针(不是数组,即使数组被衰减成指针),sizeof
某些指针也是固定的(通常是字节大小,例如4个字节) 32位机器,64位机器和系统上的8字节。
sizeof
某个指针是编译时常量,并不依赖于该指针的值。
答案 1 :(得分:3)
sizeof(string1)
为4或8个字节,具体取决于您的系统。
您应该使用strlen(string1)+1
代替。
答案 2 :(得分:1)
本声明
const int dim=sizeof(string1);
将返回指向char sizeof( char * )
的指针的sizeof。它通常等于4或8个字节,具体取决于运行程序的平台。
我认为两个字符串都应该具有相同的大小(它们可以具有不同的实际长度但是大小应该相等)并且你必须将该大小传递给函数,否则这个交换函数没有意义。
答案 3 :(得分:0)
尝试:
void stringSwap(char*string1,char*string2)
{
char temp[strlen(string1)+1];
strcpy(temp,string1);
strcpy(string1,string2);
strcpy(string2,temp);
}