【发布时间】:2011-10-11 14:01:45
【问题描述】:
我在想这样的事情:
#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 时,我实际上使用的是第一个元素而不是它的地址。谢谢。
【问题讨论】:
-
请不要使用
gets。 “永远不要使用gets()。因为事先不知道数据是不可能知道gets()会读取多少个字符的,而且因为gets()会继续存储超过缓冲区末尾的字符,所以非常危险使用。它已被用来破坏计算机安全性。请改用 fgets()。” (fgets(3))。 -
如果您不介意,我调整了代码以最大限度地减少 cmets 对您所写内容的可能性,这些内容对问题并不重要。即使用
gets()和main()的返回类型。您应该不惜一切代价避免使用gets(),并使用其他方法,例如fgets()(正如@Bertrand 解释的那样)。main()也应该总是返回int。
标签: c arrays string pointers printf