我正在制作我自己的make版本。我允许通过命令行传递一些参数。
我正在研究它。我现在正在设置fileName
我有以下代码
int main(int argc, char *argv[]) {
char *fileName = NULL;
char fileFlag[2];
strcpy(fileFlag, "-f");
printf("%s\n", fileFlag);
if (argc == 1) {
fileName = (char *) malloc(sizeof("Makefile"));
strcpy(fileName, "Makefile");
printf("One arg %s\n", fileName);
}
printf("\n%s", fileName);
return 0;
}
当它运行时,我得到以下输出。
-f
One arg Makefile
不打印另一条线吗?
答案 0 :(得分:2)
第一个问题是
strcpy(fileFlag, "-f");
fileFlag
是缺少所需空间的一个元素,您需要有3个元素数组来存储"-f"
以及终止空值。在这种情况下,根据strcpy()
行为,
strcpy
函数复制s2
指向的字符串(包括终止空值) 字符)到s1
指向的数组中。 [...]
因此,包括null-character在内,源的大小为3,因此目标也需要。否则,您将访问调用undefined behavior的绑定内存。
那就是说,
malloc()
and family in C
.。malloc()
是否成功。