c - 将 char 数组传递给函数并将内容复制到另一个 char 数组

标签 c char

我有一个 char 数组,其中放置了来自命令行的用户输入。我想将该数组传递给函数 foo 并将其内容复制到大小与原始数组中包含的内容。然而我收到了这个警告。我哪里出错了?

char inputBuffer[500];

void foo(char *inputBuffer)
{
    char readBuffer[sizeof(inputBuffer)];
    strncpy(readBuffer, inputBuffer, sizeof(inputBuffer));
}

warning: argument to 'sizeof' in '__builtin_strncpy' call is the same expression as the source, did you mean to provide an explicit length

最佳答案

在函数foo中,inputBuffer是一个指向char的指针,而不是一个数组。数组和指针不一样。 sizeof 运算符是这一现象最明显的地方之一。

如果对指针使用 sizeof 运算符,它将给出指针的大小(很可能是 4 或 8),而不是它的大小指向。

另请注意,函数参数 inputBuffer 屏蔽了同名的全局变量。

鉴于 inputBuffer 包含用户输入并且可能是一个字符串,您应该使用 strlen 来获取字符串的长度。

void foo(char *inputBuffer)
{
    char readBuffer[strlen(inputBuffer) + 1];
    strcpy(readBuffer, inputBuffer);
    // do something with readBuffer
}

另请注意,指定给 readBuffer 的大小包含一个用于终止空字节的额外字节。

关于c - 将 char 数组传递给函数并将内容复制到另一个 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290223/

相关文章:

java - 交换相对行/列中所有整数或字符的二维数组

c - 如何在c中添加char类型整数

C++ 随机字符串返回意外结果

c++ - 显示从索引 i 到字符串末尾的 std::string

c - 如果一个应用程序打开多个到 syslog 的连接会怎样?

c - C 程序如何具有多个翻译单元?

c - LLD 和链接描述文件

c - C 中的堆栈, 'int' 之前的预期表达式

c++ - 汉明距离 : Incorrect Count

c - typedef void* key_type 在 C 中是什么意思?