【发布时间】:2014-08-12 12:14:39
【问题描述】:
我需要通过添加“_out”和更改扩展名来修改通过参数传递的文件名。所以,首先,我复制没有扩展名的旧文件的名称,就像那样
char* arg1 = argv[1];
char* var1 = NULL;
var1 = malloc(strlen(arg1) * sizeof(char));
strcpy( var1, arg1 );
var1[strlen(var1) - 1] = 'l';
var1[strlen(var1) - 2] = 'm';
var1[strlen(var1) - 3] = 'x';
char* var1Out = NULL;
var1Out = malloc((strlen(var1) + 4) * sizeof(char));
strncpy( var1Out, var1, strlen(var1) - 4 ); //Marker
.
.
.
但是当我在“//Marker”之后使用 printf 显示 var1Out 时,通过参数传递“test.txt”,我得到:“test└”,最后我的程序返回“test└” _out.xml”结尾。 而当我像这样修改标记线时:
strncpy( var1Out, var1, strlen(var1) - 3 ); //Marker
它显示:
测试。
并与:
strncpy( var1Out, var1, strlen(var1) - 5 ); //Marker
它显示:
特斯
所以它工作得很好。
为什么我使用的时候会加一个字符:
strncpy( var1Out, var1, strlen(var1) - 4 ); //Marker
?
【问题讨论】:
-
每个字符串函数在the documentation 中的某个时间,以及确切它们的作用,可能会有所帮助。而且我很好奇当传递的命令行参数为
"x"(或任何其他短于至少三个字符的字符串)时,您认为您的程序会做什么。小心你的假设。他们可以回来咬你。