0

我是 C 新手,我正在尝试制作一个可变长度的字符串,如下所示:

int main(int argc, char *argv[]) {
    if (argc > 1) {
        char filename[] = argv[1];
    }
    else {
        char filename[] = "temp.txt";
    }
    printf("%s", filename);
}

当然,这不起作用,因为字符串的范围仅在条件语句内。

如何根据条件语句将此变量分配给未知长度的字符串?

4

5 回答 5

3

这是一种方式:

char* filename = "this is a different one";

if (boolean)
    filename = "this is a file name";

printf("%s", filename);
于 2012-09-27T15:52:20.007 回答
2

在简单的情况下,如您的示例中,您可以char *在外部范围声明 a :

char *str = "a different file name";
if (boolean)
    str = "this file name";

但是任何更复杂的事情,你都需要保留一个缓冲区。通常文件名/路径操作更复杂。您可以使用 eg 执行与上述相同的操作argv[1],但我会复制参数,因为我可能会在稍后的程序中进行更改 filename,并且只需将新指针分配给参数数组或文字字符串,就会造成问题。

char filename[MAX_PATH + 1];

strncpy(filename, "temp.txt", MAX_PATH);
if (argc > 1)
    strncpy(filename, argv[1], MAX_PATH);

// .. later
strncat(filename, "temp.txt", MAX_PATH);

但是,如果您只设置filename一次,以下也将起作用:

char *filename = "temp.txt";

if (argc > 1)
    filename = argv[1];
于 2012-09-27T15:52:28.647 回答
1

您必须在 if 语句之外声明文件名变量,否则在 if 语句之后它将不可见。在 if 语句中,您必须使用 strcpy 将字符串复制到变量中。如果您不必更改字符串,则可以使用 char 指针而不是 char 数组。

于 2012-09-27T15:53:08.367 回答
0

在条件语句之前定义字符串。然后使用字符串复制功能,例如strcpy,将您想要的值放入字符串中。例如:

char filename[ MAX_PATH ];  
if (boolean) { 
    strcpy( filename, "this file name" ); 
} 
else { 
    strcpy( filename, "a different file name" ); 
} 
printf("%s", filename);
于 2012-09-27T15:57:07.677 回答
0
char filename[256];

if (boolean) {
    strcpy(filename,"this file name");
}
else {
    strcpy(filename, "a different file name");
}
printf("%s", filename);

或者您可以使用它malloc来分配内存并复制字符串。

于 2012-09-27T15:53:39.290 回答