我有以下代码:
int main(int argc,char * argv[] )
{
char* SourceWeightFiel;
char* TargetWeightFile;
strcpy( SourceWeightFiel, argv[1] );
strcpy( TargetWeightFile, argv[2] );
return 1;
}
当我在gdb中调试它时,运行第一个strcpy是好的,但是当它转到第二个strcpy时,它总是会出现以下错误:
26 strcpy( SourceWeightFiel, argv[1] );
(gdb) n
27 strcpy( TargetWeightFile, args );
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
__strcpy_sse2_unaligned ()
at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:94
94 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory.
(gdb)
我无法弄清楚原因,也不知道如何修复它。有人知道吗?
答案 0 :(得分:0)
假设您出于某种原因使用C风格的字符串 - 如果没有,请使用std :: string作为上面建议的@manni66。
您正在声明变量SourceWeightFiel
和TargetWeightFiel
,但您没有分配任何空间来复制它们。您可以使用malloc ()
(或类似)自行完成,也可以使用strdup ()
在您完成任务后,不要忘记释放分配的空间(无论使用哪种方法)。
int main(int argc,char * argv[] ) {
char* SourceWeightFiel;
char* TargetWeightFile;
SourceWeightFiel = strdup (argv[1]);
TargetWeightFile = strdup (argv[2]);
/* After you've used them... */
free (TargetWeightFile);
free (SourceWeightFiel);
return 1;
}
答案 1 :(得分:0)
基本问题是strcpy不分配任何内存,它只是从一个地方复制到另一个地方,并假设在目的地位置分配了足够的空间。
您需要在SourceWeightFiel和TargetWeightFile中分配足够的空间。
甚至更好,使用strdup。
如前所述,std :: string也会简化问题。
答案 2 :(得分:0)
另一种解决方案:
int main(int argc,char * argv[] )
{
char SourceWeightFiel[256]="";
char TargetWeightFile[256]="";
strcpy( SourceWeightFiel, argv[1] );
strcpy( TargetWeightFile, argv[2] );
return 1;
}