C 为什么我的指针会有奇怪的输出?

C 为什么我的指针会有奇怪的输出?,c,string,pointers,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(m

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

#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;
}
#包括
#包括
#包括
int main(){
尺寸n=10;
char*mystring=malloc(10);
内线=0;
int标记=0;
char*ptr;
if(mystring==NULL){
fprintf(stderr,“无内存”);
出口(1);
}
while(getline(&mystring,&n,stdin)>0){
printf(“len=%lu,mystring=%s\n”,strlen(mystring),mystring);
printf(“让我们将此字符串标记化\n行=%d标记=%d\n”,行,标记);
ptr=mystring;
printf(“ptr=%ch\n”,ptr[0]);
}
返回0;
}
这就是我输入hello时输出的样子

len=6,mystring=hello

让我们标记这个字符串 行=0标记=0

ptr=hh


双hh是怎么回事?

这就是您正在打印的内容。您正在打印
ptr=h
。在
printf()
语句中,在
%c
之后有一个额外的
h
。您可能希望使用:

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

这就是你正在打印的内容。您正在打印
ptr=h
。在
printf()
语句中,在
%c
之后有一个额外的
h
。您可能希望使用:

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

用于打印字符的格式说明符是
%c
。您有
%ch
,意思是“打印下一个参数给定的字符,然后打印一个“h”

去掉格式字符串中多余的
h

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

用于打印字符的格式说明符是
%c
。您有
%ch
,意思是“打印下一个参数给定的字符,然后打印一个“h”

去掉格式字符串中多余的
h

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

双hh是怎么回事

first
h
来自
hello
字符串的第一个字符,对应于
ptr[0]
,并且自从您在
printf
格式字符串中使用了
%c
后就存在了

第二个
h
就在那里,因为您将它放在
printf
格式字符串中,在
%c
之后

正确的printf调用如下:

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

如果您想打印一个地址(指针),您可能需要考虑(可以使用<代码> %P</代码>格式说明符)。 ptr=hh

双hh是怎么回事

first
h
来自
hello
字符串的第一个字符,对应于
ptr[0]
,并且自从您在
printf
格式字符串中使用了
%c
后就存在了

第二个
h
就在那里,因为您将它放在
printf
格式字符串中,在
%c
之后

正确的printf调用如下:

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

如果您想打印一个地址(指针),您可能需要考虑(可以使用<代码> %P< /代码>格式说明符)。

我相信您正在寻找<代码> %c>代码>。第一个H来自
hello
中的第一个字符,而第二个H来自
printf
中的
H
。我明白了,我觉得自己像个白痴。谢谢你向我指出,我们中最好的人都会遇到这种情况,不用担心!最好不要使用malloc(),而是:
char*mystring=NULL;尺寸n=0
和call free()并在每次通过while循环结束时重置值,因为函数:
getline()
可以直接读取NUL字符,所以代码应该使用
n
变量作为长度,而不是调用
strlen()
的结果。我相信您正在查找
%c
。第一个H来自
hello
中的第一个字符,而第二个H来自
printf
中的
H
。我明白了,我觉得自己像个白痴。谢谢你向我指出,我们中最好的人都会遇到这种情况,不用担心!最好不要使用malloc(),而是:
char*mystring=NULL;尺寸n=0
和call free()并在每次通过while循环结束时重置值,因为函数:
getline()
可以直接读取NUL字符,所以代码应该使用
n
变量作为长度,而不是调用
strlen()的结果