关于c语言中指针操作字符串和指针取值的问题

int main(int argc, char const *argv[])
{
// 问题一:问什么第一种可以,第二种却不行呢?
char buf[]={'t','e','\0'};
printf("%s\n",*(buf+1)); // 没有输出结果

int arr[3]={1,2,3};
printf("%d\n",*(arr+1));// 输出2

// 问题二:问什么第一种可以,第二种却不行呢?
int a=12;
int *p1=&a;
printf("%d\n",*p1); // 输出12

char buf[]="test";
char *p=buf;
printf("%s\n",*p); // 没有输出结果

}

问题一里,如果你想打印字符串,printf第二个参数应该是地址而不是地址里的内容,
如果你想打印一个字符,应该是%c而不是%s
应该写为printf("%s\n",(buf+1)); 或者 printf("%c\n",*(buf+1)); (输出是e)
问题二和一应该是同样的错误
printf("%s\n",p);是打印整个字符串'test'
如果你只打印一个字符,比如s
printf("%c\n",*(p+2));
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-26

printf输出字符串需要传入的参数应是你想要开始的地址,把buf+1前面的解引用(*)去掉即可

*(buf+1)传递的是值应该用于输出字符的情况,如printf("%c\n",*(buf+1));

第二个同理;

推荐一本c语言语法书,c prime plus ,对于这种基本语法解释的相当清楚

相似回答