为什么我从指针得到奇怪的输出?

时间:2016-10-24 17:03:05

标签: c string pointers

所以我要做一些字符串操作,但是当我尝试打印出我的指针指向的时间时,我得到了非常奇怪的输出。

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

int main (){

    size_t n = 10;
    char *mystring = malloc(10);
    int line = 0;
    int tokens = 0;
    char *ptr;

    if(mystring==NULL){
            fprintf(stderr, "No memory\n");
            exit(1);
    }

    while(getline(&mystring, &n, stdin)>0){
             printf("len = %lu, mystring = %s\n", strlen(mystring), mystring);
             printf("let's tokenize this string\n line = %d tokens = %d\n", line, tokens);

            ptr = mystring;

            printf("ptr = %ch\n", ptr[0]);
    }

return 0;
}

这是我输入hello

时输出的样子

len = 6,mystring = hello

让我们对此字符串进行标记  line = 0 tokens = 0

ptr = hh

什么是双h?

3 个答案:

答案 0 :(得分:3)

这就是您要打印的内容。您正在打印ptr = <ptr[0]>hh语句中%c之后还有printf()。您可能想要使用:

        printf("ptr = %c\n", ptr[0]);

答案 1 :(得分:0)

打印字符的格式说明符为%c。你有%ch,就是说“打印下一个参数给出的字符,然后打印'h'”。

删除格式字符串中的额外h

printf("ptr = %c\n", ptr[0]);

答案 2 :(得分:0)

  
printf("ptr = %ch\n", ptr[0]);
  
     

ptr = hh

     

什么是双h?

第一个 h来自hello字符串的第一个字符,对应ptr[0],自您使用%c以来就在那里在printf格式字符串中。

第二个 h已存在,因为您将printf格式字符串放在%c之后。

正确的printf调用类似于:

printf("ptr = %c\n", ptr[0]);

如果要打印地址(指针),可能需要考虑this SO question(可以使用%p格式说明符)。