arrays - C 编程:使用字符指针打印以空字符结尾的字符串
问题描述
我刚刚习惯了 C 中的指针。我正在考虑使用 %s 来打印字符数组的第一个字符。
在下面的代码中,为什么 %s 不起作用,但 %c 起作用?如果 *my_string 正在取消引用字符数组的第一个值,那么 %s 是否会尝试打印内存中从该地址开始的所有字符并继续直到到达一个空零字符?
此外,如何printf("%s", my_string)
工作,但printf("%s" *my_string)
不是?
char* my_string = "The original value.";
printf("Value of my_string: %s\n", my_string);
my_string = "The new value.";
printf("Value of my_string: %s\n", *my_string); // Error
printf("Value of my_string: %c\n", *my_string); // Prints only the first letter 'T', but does not have any errors
解决方案
星号*
取消引用指向它所指向的类型的指针,因此当my_string
是指向字符的指针时,*my_string
是一个字符。您的 C 编译器会看到包含 a%s
和一个参数的格式字符串,该参数*my_string
是一个字符,并向您显示错误。
要输出整个字符串,请像在第一次调用 时一样打印它printf
,要只打印一个字符,请像上次调用时那样做printf
。
推荐阅读
- javascript - 有没有办法在 Leaflet.js 中找到多边形的交集?
- php - Symfony 4 make:migration 在 ManyToMany 时不起作用
- javascript - 如何使用 mongoose 在循环中迭代 mongoose 返回的文档数组?
- javascript - Highcharts - 用 24 小时格式的 2 位数小时格式化 X 轴
- c# - 无法在c#中将字符串转换为日期时间
- java - 如何开启单声道
- haskell - 在 `State` monad 上使用 `mapM` 和 `foldM` 避免空间泄漏
- postgresql - 插入现有表时自动更新主键?
- tfs - TFS2017 是什么决定了 perm 上可用的 dotnet(核心)构建步骤版本?
- java - 如何设置 DataProvider 从后端获取的元素数量?