将指针(字符串)传递给C函数

Bracketz

请说到最后,再说:“哦,不,这个问题再次出现……”

我现在正坐在C课程中,并且在课本中提供了以下示例:

#include <stdio.h>
#include <stdint.h>

void Terminal_PrintData(uint16_t * const Data);

int main(void){
    uint16_t StringData[] = "MyData";
    Terminal_PrintData(StringData);
}

void Terminal_PrintData(uint16_t * const Data)
{
    printf("Value: %s", *Data);
}

当我编译这个杰作时,我得到的是:

F:\AVR Microcontroller>gcc -o test test.c
test.c: In function 'main':
test.c:7:26: error: wide character array initialized from non-wide string
  uint16_t StringData[] = "MyData";

我的问题是:

  • 用声明字符串是否正确uint16_t
  • 建议将字符串传递给函数的方法是什么?
用户名

您的直接问题:

  • 用uint16_t声明字符串是否正确?

不。

所有的字符串都是永远的char[]也有宽字符串宽字符的字符串),其类型为wchar_t[],并以L前缀(例如L"hello"编写

  • 建议将字符串传递给函数的方法是什么?

作为指针以在字符串中的第一个字符,所以无论是char *wchar_t *const此处预选赛毫无意义。这意味着指针(而不是字符串本身)是常量(请参见此处)。我建议wchar_t const *还是const wchar_t *它有不同的含义(即字符串不能更改),但它是正确且有意义的。


您提到此代码来自一本教科书。我不确定您是说这些是您的教授分发的讲义,还是购买了已出版的书。无论哪种情况,如果该摘录都代表了书/笔记的质量,请退款

现在,让我们使这段代码起作用。

这段代码中有一个错误,它将导致程序崩溃:

  • printf("... %s ...", ..., *string, ...)string是一个char*永远是错的。不要取消引用该指针。

如果您坚持使用“宽”字符(这是可疑的),那么您将不得不进行一些更改:

  • char无需使用而是需要包含<wchar.h>和使用wchar_t据我所知,uint16_tuint8_t不会工作,除非你使用显式铸造无处不在。那是因为char没有8位,而是CHAR_BITbits
  • 宽字符文字必须以L前缀开头
  • 而不是使用printf,您需要使用wprintf
  • 在格式字符串中,使用%ls而不是%s除非您使用Microsoft的编译器。)

最后,一些不太严重的错误:

  • 如前所述,T * const参数是没有用的。作者可能的意思是T const *(或等效地const T *)。
  • 您可以删除<stdint.h><stdio.h>我们不再使用uint16_t,并<wchar.h>声明了一些类似于字符<stdio.h>的函数。

我最终得到以下代码:

#include <wchar.h>

void Terminal_PrintData(wchar_t const * Data);

int main(void){
    wchar_t StringData[] = L"MyData";
    Terminal_PrintData(StringData);
}

void Terminal_PrintData(wchar_t const * Data)
{
    wprintf(L"Value: %ls", Data);
}

它可以在Linux x86-64上与GCC和Clang一起编译并按预期运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将字符串传递给接受char指针的函数

来自分类Dev

将默认的字符串指针传递给函数

来自分类Dev

将字符串地址作为参数传递给指针,指针传递给char函数

来自分类Dev

将字符串传递给函数并在C中进行修改(指针存在问题)

来自分类Dev

将字符串数组传递给C中的函数

来自分类Dev

将C ++字符串传递给ac#函数

来自分类Dev

C ++将字符串数组传递给函数

来自分类Dev

C 将字符串传递给函数问题

来自分类Dev

将swift字符串传递给c函数char *

来自分类Dev

将字符串传递给函数

来自分类Dev

将字符串传递给函数

来自分类Dev

将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

来自分类Dev

将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

来自分类Dev

传递给嵌套函数的字符串文字指针问题

来自分类Dev

我正在尝试使用双指针将字符串传递给函数,但出现错误

来自分类Dev

如何将字符串数组指针传递给新的字符数组?在 C

来自分类Dev

传递给函数指针然后返回c时,字符串打印出垃圾

来自分类Dev

C - 传递给函数的指针不保留分配的字符串

来自分类Dev

将字符指针数组传递给C函数

来自分类Dev

将字符串向量传递给函数和函数原型问题 C++

来自分类Dev

将字符串传递给javascript函数

来自分类Dev

无法将字符串传递给函数

来自分类Dev

执行malloc后将字符串传递给函数

来自分类Dev

将字符串矩阵传递给修改它的函数

来自分类Dev

如何将字符串传递给宏函数

来自分类Dev

将字符串文字传递给模板函数

来自分类Dev

将HTML字符串传递给JavaScript函数

来自分类Dev

将字符串传递给ggplot函数

来自分类Dev

将编码的字符串传递给Javascript函数

Related 相关文章

  1. 1

    将字符串传递给接受char指针的函数

  2. 2

    将默认的字符串指针传递给函数

  3. 3

    将字符串地址作为参数传递给指针,指针传递给char函数

  4. 4

    将字符串传递给函数并在C中进行修改(指针存在问题)

  5. 5

    将字符串数组传递给C中的函数

  6. 6

    将C ++字符串传递给ac#函数

  7. 7

    C ++将字符串数组传递给函数

  8. 8

    C 将字符串传递给函数问题

  9. 9

    将swift字符串传递给c函数char *

  10. 10

    将字符串传递给函数

  11. 11

    将字符串传递给函数

  12. 12

    将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

  13. 13

    将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

  14. 14

    传递给嵌套函数的字符串文字指针问题

  15. 15

    我正在尝试使用双指针将字符串传递给函数,但出现错误

  16. 16

    如何将字符串数组指针传递给新的字符数组?在 C

  17. 17

    传递给函数指针然后返回c时,字符串打印出垃圾

  18. 18

    C - 传递给函数的指针不保留分配的字符串

  19. 19

    将字符指针数组传递给C函数

  20. 20

    将字符串向量传递给函数和函数原型问题 C++

  21. 21

    将字符串传递给javascript函数

  22. 22

    无法将字符串传递给函数

  23. 23

    执行malloc后将字符串传递给函数

  24. 24

    将字符串矩阵传递给修改它的函数

  25. 25

    如何将字符串传递给宏函数

  26. 26

    将字符串文字传递给模板函数

  27. 27

    将HTML字符串传递给JavaScript函数

  28. 28

    将字符串传递给ggplot函数

  29. 29

    将编码的字符串传递给Javascript函数

热门标签

归档