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是怎么回事
firsth
来自hello
字符串的第一个字符,对应于ptr[0]
,并且自从您在printf
格式字符串中使用了%c
后就存在了
第二个h
就在那里,因为您将它放在printf
格式字符串中,在%c
之后
正确的printf调用如下:
printf("ptr = %c\n", ptr[0]);
如果您想打印一个地址(指针),您可能需要考虑(可以使用<代码> %P</代码>格式说明符)。 ptr=hh
双hh是怎么回事 firsth
来自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()的结果