【发布时间】:2016-06-08 07:18:14
【问题描述】:
我最近一直在研究 C 语言编程的代码。我在处理二维字符串和指针时被困在这里。函数 printf()、putchar() 和 puts() 也令人困惑!请帮我解决以下sn-p:
#include<stdio.h>
int main()
{
char wer[3][4]= {"bag", "let", "bud"};
char (*ptr)[4]=wer;
printf("%d %d %d\n",ptr, ptr+1, ptr+1); // points to bag, let and bud respectively
printf("%d %d %d\n",wer, wer+1, wer+1); // points to bag, let and bud respectively
printf("%d %d %d\n", (*ptr), (*ptr+1), (*ptr +2)); // points to b,a,g respectively
printf("%s\n",*(ptr+1)); //prints let
printf("%s\n", (ptr+1)); //prints let
printf("%s\n", (*ptr +1)); //prints ag
puts(*(ptr+1)); //prints let
//puts((ptr+1)); //gives error
puts((*ptr+1)); //prints ag
putchar(**(ptr+1));//prints l
putchar(*(*ptr +1));//prints a
return 0;
}
我想知道为什么*(ptr+1) 和(ptr+1) 都对printf 起作用,而(ptr+1) 对puts 给出错误。我也知道putchar 接受一个整数参数。为什么我们在这里使用双指针?
【问题讨论】:
-
使用
%p打印指针 -
另外,我要求您重新阅读手册页并仔细检查提供的数据类型。 :)
-
“给出错误”:哪个错误?
-
我已经尝试过您在 gcc 版本 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 中提到代码 sn-p 并且在编译时或运行时我没有看到任何错误。
-
[错误] 无法将参数 '1' 的 'char ()[4]' 转换为 'const char' 到 'int puts(const char*)'跨度>
标签: c string printf getchar puts