C指向字符数组的指针

时间:2014-06-15 22:11:22

标签: c arrays pointers

我想将一个字符指针(到一个数组)传递给一个将逐个打印字母的函数。例如,我使用以下代码:

#include<stdio.h>
#include<string.h>

void string1(char *q)
{   
    while(*q)
    {
        printf(q++);
        printf("\n");
    }
}

main()
{
    char name[]= "hello";
    char *p=name;
    string1(p);
}

打印:

  • 你好
  • ELLO
  • LLO
  • LO
  • 0

但我想要它打印;

  • ħ
  • ë
  • o

我无法通过在printf中使用变量q来实现。感谢

3 个答案:

答案 0 :(得分:3)

你的句子:printf(q++);是错的。
你必须只打印一个角色:

  printf("%c", *g++);   

更好的选择:

 putchar(*g++);  

一般来说,请注意:

  • g是一系列字符的地址。
  • 要访问g指向的第一个字符,必须使用运算符*,这样:*g

"%c"中的修饰符printf()使您可以打印char类型的数据。

答案 1 :(得分:2)

您应始终使用带有printf的格式字符串。将具有未知值的字符串传递到printf函数可能会产生uncontrolled format string vulnerability。使用printf打印c-string应如下所示:printf("%s", string_pointer);

也就是说,要一次打印一个字符,您可以使用%c格式化程序:

while(*q) {
    printf("%c\n", *(q++));
}

答案 2 :(得分:1)

您需要指定printf()

的第一个参数

通过这样做:

printf(q++);

应用程序的行为就像你想要打印一个字符串一样(因为它一直打印到达\0),所以你正在做的就是这个;

printf("%s",q++);

但你真正想要的只是打印q位置的字符:

printf("%c",q++); // Prints only the char at q, then increment q