我正在尝试构建一个简单的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;
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;
}
答案 0 :(得分:3)
您已将p3
声明为 pointers 的数组,而不是字符数组。然后,您将*p3
传递给strcpy
,这是一个未初始化的指针,然后尝试取消引用调用undefined behavior的无效指针。
您还没有在字符串p3
的末尾给c
留空字节。
将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);
}