c - sizeof argv[1] 不工作

标签 c sizeof

我真的是 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/

相关文章:

c++ - 编译器错误 xcode 未声明的标识符 c++

c - 结构的大小和指向结构的指针?

c - 如何在 C 中不使用零填充截断 FAT32 文件系统中的文件?

Objective-C 使用数学将数字显示为单词

c++ - 通过运行可执行文件来制作可执行文件

c - 如何找到数组的大小(从指向第一个元素数组的指针)?

c - Malloc 失败并显示 errno 12

c - 初始化分配数组的大小

c - 循环时使用文件指针