我在想这样的事情:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void) {
//test pointer to string
char s[50];
char *ptr=s;
printf("\nEnter string (s): ");
fgets(s, 50, stdin);
printf("S: %s\nPTR: %s\n", s, *ptr);
system("PAUSE");
return 0;
}
或者我应该使用带有 *(s+i) 和格式说明符 %c 的 for 循环?
这是通过指针和简单 printf 打印字符串的唯一可能方法吗?
更新: printf 使用数组第一个元素的地址进行操作,因此当我使用 *ptr 时,我实际上使用第一个元素而不是其地址进行操作。谢谢。
The "%s"
格式说明符printf
always期望一个char*
争论。
Given:
char s[] = "hello";
char *p = "world";
printf("%s, %s\n", s, p);
it looks就像你第一次传递一个数组一样%s
和第二个的指针,但实际上您(正确地)为两者传递了指针。
在 C 中,任何数组类型的表达式都会隐式转换为指向数组第一个元素的指针unless它处于以下三种情况之一:
- 它是一元“&”(地址)运算符的参数
- 它是一元“sizeof”运算符的参数
- 它是初始化器中的字符串文字,用于初始化数组对象。
(我认为 C++ 还有一两个其他例外。)
实施printf()
看到"%s"
,假设相应的参数是一个指向 char 的指针,并使用该指针遍历字符串并打印它。
第 6 条comp.lang.c 常见问题解答 http://www.c-faq.com对此有精彩的讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)