不在if语句之外打印

时间:2016-09-27 17:38:15

标签: c arrays string pointers

我正在制作我自己的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

不打印另一条线吗?

1 个答案:

答案 0 :(得分:2)

第一个问题是

  strcpy(fileFlag, "-f");

fileFlag是缺少所需空间的一个元素,您需要有3个元素数组来存储"-f"以及终止空值。在这种情况下,根据strcpy()行为,

  

strcpy函数复制s2指向的字符串(包括终止空值)   字符)到s1指向的数组中。 [...]

因此,包括null-character在内,源的大小为3,因此目标也需要。否则,您将访问调用undefined behavior的绑定内存。

那就是说,