所以我要做一些字符串操作,但是当我尝试打印出我的指针指向的时间时,我得到了非常奇怪的输出。
#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?
答案 0 :(得分:3)
这就是您要打印的内容。您正在打印ptr = <ptr[0]>h
。 h
语句中%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
格式说明符)。