c - 将指针传递给字符串,不兼容的指针类型

标签 c string pointers arguments

所以我确定这个问题已经回答了很多次,但我不知道如何解决我的情况。我截取了我的程序片段,其中包含我的警告生成代码:

#include <stdio.h>
#include <stdlib.h>

inputData(int size, char *storage[size])
{
    int iterator = -1;

    do {
        iterator++;
        *storage[iterator] = getchar();
    } while (*storage[iterator] != '\n' && iterator < size);
}

main()
{
    char name[30];

    inputData(30, name);
}

警告信息:

$ gcc 文本.c text.c:在函数“main”中: text.c:18:5: 警告:从不兼容的指针类型传递‘inputData’的参数 2 [默认启用] inputData(30, name); ^ text.c:4:1: 注意:应为“char **”但参数类型为“char *” inputData(int size, char *storage[size])

编辑:

好的,所以我设法尝试了一些语法并解决了我的问题。我仍然不介意听到比我更有见识的人为什么需要这样做。这是我更改的内容:

#include <stdio.h>
#include <stdlib.h>

inputData(int size, char *storage) // changed to point to the string itself 
{
    int iterator = -1;

    do {
        iterator++;
        storage[iterator] = getchar(); // changed from pointer to string
    } while (storage[iterator] != '\n'); // same as above
}

main()
{
    char name[30];

    inputData(30, name);

    printf("%s", name); // added for verification
}

最佳答案

数组名称在传递给函数时转换为指向其第一个元素的指针。 name 将被转换为 &name[0](指向 char 类型的指针)这是第一个元素的地址数组名称。因此,函数的第二个参数必须是指向char 类型的指针。

char *storage[size] 在声明为函数参数时等同于 char **storage。因此,将 char *storage[size] 更改为 char *storage

关于c - 将指针传递给字符串,不兼容的指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768008/

相关文章:

从不同目录编译相同的 c 程序会生成不同大小的目标代码

java - 如何将字符串转换为字节并返回

pointers - 为什么Go的package标志使用指针?

c - 指向数组解引用的指针

JavaScript - 如何/可以从函数中将对象引用设置为 null?

c - 内存分配问题

c++ - OpenCV 中的 CV_8UC1 到 CV_32FC1 的转换

c - 什么是 intel 机器中的 VIctim 缓存?我们可以禁用它吗?

javascript - 检查文本是否包含序列。字符的相邻性不是必需的

c# - 为什么 String.CompareTo 不考虑字符串长度?