printf无法识别C指针
我正在尝试构建一个简单的C应用程序测试指针。但是,没有输出,我不确定为什么printf无法识别C指针,c,C,我正在尝试构建一个简单的C应用程序测试指针。但是,没有输出,我不确定为什么 void printSummary(int *a, float *b, char *c[]) { printf("Summary: \n A: %d\n B: %.1f\n C: %s\n", *a, *b, *c); } int pointersChanging () { // init variables int a = 10; float b = 20.0;
void printSummary(int *a, float *b, char *c[]) {
printf("Summary: \n A: %d\n B: %.1f\n C: %s\n", *a, *b, *c);
}
int pointersChanging () {
// init variables
int a = 10;
float b = 20.0;
char c[] = "Hello, World!";
// Init pointer variables
int *p1 = &a;
float *p2 = &b;
char *p3[strlen(c)]; /* init new char sequence using the length of c */
strcpy( *p3, c); /* copy c into *p3 (the value of p3) */
printSummary(p1,p2,p3);
return 0;
}
int main(void)
{
pointersChanging();
return 0;
}
您已将
p3
声明为指针数组,而不是字符数组。然后将*p3
传递给strcpy
,它是一个未初始化的指针,然后尝试取消对无效指针调用的引用
您还没有为字符串c
末尾的空字节提供p3
空间
将p3
更改为char
数组,并给它一个额外的字节空间:
char p3[strlen(c)+1];
strcpy( p3, c);
并更改printSummary
以匹配:
void printSummary(int *a, float *b, char c[]) {
printf("Summary: \n A: %d\n B: %.1f\n C: %s\n", *a, *b, c);
}
我的错,我应该解释的。它只调用pointersChanging函数
p3
是strlen(c)指针的数组,为什么需要它?单个字符指针足以指向c
char*p3[strlen(c)]代码>是指针数组*p3
(与p3[0]
)相同)是一个统一的指针。您不能strcpy()
插入其中。请发布一个,以便我们可以帮助您调试问题发布的代码无法编译!除其他事项外,它缺少所需头文件所需的#include
语句。您是否希望我们猜测您的实际代码包含哪些头文件?这是可行的,但p3变量的要点是在此上下文中使用指针变量。您建议的代码只是从p3变量中删除指针元素,实质上使其成为c变量。@RyanCocuzzo那么您根本不需要数组。只需将p3
声明为指针:char*p3=c代码>。生成输出:摘要:A:10