在条件语句中分配一个可变长度的字符串

时间:2012-09-27 15:50:22

标签: c string scope

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

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

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

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

5 个答案:

答案 0 :(得分:2)

这是一种方式:

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

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

printf("%s", filename);

答案 1 :(得分:1)

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

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

但更复杂的是你需要保留一个缓冲区。通常文件名/路径操作更复杂。您可以执行与上述相同的操作,例如: 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];

答案 2 :(得分:1)

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

答案 3 :(得分:0)

char filename[256];

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

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

答案 4 :(得分:0)

在条件语句之前定义字符串。然后使用字符串复制功能(例如strcpy)将所需的值放入字符串中。例如:

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