c - 指针和函数

标签 c pointers

我是 C 编程新手。我从 RTKLIB 编写了这段代码图书馆。

extern void satno2id(int sat, char *id)
{
    int prn;

    switch (satsys(sat, &prn)) {
        case SYS_GPS: sprintf(id,"G%02d",prn-MINPRNGPS+1); return;
        case SYS_GLO: sprintf(id,"R%02d",prn-MINPRNGLO+1); return;
        case SYS_GAL: sprintf(id,"E%02d",prn-MINPRNGAL+1); return;
        case SYS_BDS: sprintf(id,"C%02d",prn-MINPRNBDS+1); return;
    }
    strcpy(id, "");
}

在此函数中,第一个参数是输入,第二个参数是输出。现在的问题是如何获取 main() 函数中第二个参数的值? 我已经编写了这段代码,但出现错误。这是怎么回事?

int main(){
    char *id;
    satno2id(68, &id);
    printf("satellite number is %s", *id);
}

最佳答案

在 C 语言中,数组的名称降级为指向该数组第一个元素的指针。

函数中的id需要一个指向字符数组(字符串)第一个元素的指针。这是显而易见的,因为 satno2id() 中使用了用于写入字符数组的 sprintf() 函数。

因此发送一个 char 数组,例如

char id[4];
satno2id(68, id);

我将数组的大小设置为 4,因为 satno2() 似乎正在写入长度为 3 的字符串。额外的字节用于存储 \0终结者。

关于c - 指针和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50077129/

相关文章:

C# 编码 native 大小的无符号整数 size_t,通过 ref/out 参数检索值

c++ - 使用指针显示数组的值

c - 随机播放数据而不是指向它的指针是一种不好的形式吗?

c - 如果 C 有指针,为什么它需要数组?

c - 为什么 fopen 在不保存返回指针的情况下工作?

c - 这两个指向 char 初始化的指针之间的区别

c - 如何用 C 创建迷你基准程序

c++ - C 和 C++ 中的 "Variable was not declared in this scope"

c - 定义大小的char数组指针

检查指针是否指向给定数组