我对 C 确实很陌生,我只知道该错误与 oldname
和 newname
未初始化有关
#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/53250593/