如何打印出char指针指向的字符串?

时间:2014-11-24 12:36:42

标签: c string pointers char

我有这个程序打算测试两件事:

  1. 分配后,无法将字符串分配给另一个字符串。
  2. 但是两个char指针可以指向相同的字符串。
  3. // Program-

    #include <stdio.h> 
    #include <string.h>
    int main(int argc, char const *argv[])
    {
        char str[]="hello";
        char str2[10];
        int i=0;
        char *s="Good";
        char *p;
    
        //error
        //str=str2;
        printf("String str2: %s\n", str);
        //no error
        p=s;
        //printf("String pointed to by p: %s\n", *p );
        while(*s!='\0')
        {
            printf("%c", s[i]);
            s++;
            i++;
    
        }
        printf("\n");
        return 0;
    }
    

    当我打印出“好”的内容时,我得到了垃圾值。任何其他单词都一样。在while循环中出了什么问题?

2 个答案:

答案 0 :(得分:2)

增加数组索引和指针s:在第一次迭代期间,i == 0s指向字符串G中的Good。在第二次迭代中,s指向第一个oi == 1,因此s[i]是第二个o,这可能不是您想要的。< / p>

如果您对i++发表评论,那么一切都会按预期发挥作用:http://ideone.com/7zUOfM

答案 1 :(得分:2)

在这个循环中

while(*s!='\0')
{
    printf("%c", s[i]);
    s++;
    i++;

}

您正在同时递增索引i

    i++;

和指向字符串文字的指针

    s++;

因此,这会产生一些垃圾,因为s[i] is递增后会访问字符串文字以外的内存。

您应该只增加索引i或相应的指针。例如,您可以简单地写

while ( *p ) printf( "%c", *p++ );