我是C的新手,我正在尝试制作一个可变长度的字符串,如下所示:
int main(int argc, char *argv[]) {
if (argc > 1) {
char filename[] = argv[1];
}
else {
char filename[] = "temp.txt";
}
printf("%s", filename);
}
当然,这不起作用,因为字符串的范围仅在条件语句中。
如何根据条件语句将此变量分配给未知长度的字符串?
答案 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);