gpt4 book ai didi

c - sizeof argv[1] 不工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:14 25 4
gpt4 key购买 nike

我真的是 C 的新手,我所知道的是错误与 oldnamenewname 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com