c - sizeof argv[1] 不起作用

标签 c sizeof

我对 C 确实很陌生,我只知道该错误与 oldnamenewname 未初始化有关

#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/

相关文章:

c - 在数组中存储临时值与多个变量

python - ctypes 将 c_uint64 转换为 c_char_p

c - 套接字 - 在c中发送一个大字符串

在没有 memcpy 的情况下连接两个内存缓冲区

python - 如何获取c头文件中定义的列表?

c - 如何可维护地确定 sizeof(struct ...)s?

c++ - sizeof() 运算符在 C++ 中做什么

c++ - 如何检查 LIB 导入库是否完全匹配其 DLL?

c++ - 这个结构怎么会有 sizeof == 0?

c - char 和 int 上的 C struct 位字段之间的区别