我真的是 C 的新手,我所知道的是错误与 oldname
和 newname
not be initialized 有关
#include <stdio.h>
int main (int argc, char const *argv[])
{
int result;
int lengthOne;
int lengthTwo;
lengthOne = sizeof(argv[0]);
lengthTwo= sizeof(argv[1]);
char oldname[lengthOne] = argv[0];
char newname[lengthOne] = argv[1];
result = rename(oldname, newname);
if (result == 0) {
puts "File renamed";
} else {
perror "ERROR: Could not rename file";
}
return 0;
}
app.c: In function ‘main’:
app.c:11: error: variable-sized object may not be initialized
app.c:12: error: variable-sized object may not be initialized
app.c:17: error: expected ‘;’ before string constant
app.c:19: error: expected ‘;’ before string constant
最佳答案
lengthOne = sizeof(argv[0]);
lengthTwo= sizeof(argv[1]);
这为您提供了 char*
的大小,不是字符串的长度。你的意思是 strlen
,而不是 sizeof
。
char oldname[lengthOne] = argv[0];
char newname[lengthOne] = argv[1];
你不能像这样给数组赋值。你可以 strcpy
它们,但这里没有必要,因为你可以只使用指针。
const char* oldname = argv[0];
const char* newname = argv[1]; // But verify that argc >= 2 first!
编辑:另外,不要忘记 argv[0]
是程序本身的名称,argv[1]
是第一个参数。如果您的目的是编写类似 mv
的程序而不是重命名自身的程序,您需要 argv[1]
和 argv[2]
.
关于c - sizeof argv[1] 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255066/