我在1年后回忆起我的C编程技巧。所以我决定从头开始。我被这个程序困住了。非常感谢你的帮助。提前感谢你。
这是我的代码。
/*Reading a number and string and printing on screen using pointers*/
#include <stdio.h>
main()
{
int number, *ptr,*ptr2;
char string[20];
ptr=&number;
ptr2= &string;
printf("Enter a number");
scanf("%d",&number);
printf("Enter a string");
scanf("%s", string);
printf("Your number is: %d\n", *ptr);
printf("String is %s \n", *ptr2);
}
之后要求输入的是打印编号而不是打印字符串。它不显示字符串,而是显示分段错误。
以上程序是从用户读取和打印号码和名称。这是期待的程序,但它不能正常工作。
答案 0 :(得分:2)
在您的程序中,ptr2
被声明为整数指针,并且您将其指向string
。 ptr2
应为char *
类型。
在此声明中:
ptr2= &string;
您不需要在数组名称之前提供&
运算符。数组名称转换为指向数组对象的初始元素的指针。所以,它应该是:
ptr2 = string;
如果您使用scanf
从用户获取输入字符串,请确保防止缓冲区溢出。查看this和this。
你可以这样做:
#include <stdio.h>
int main()
{
int number, *ptr;
char *ptr2;
char string[20];
ptr = &number;
ptr2 = string;
printf("Enter a number: ");
scanf("%d",&number);
printf("Enter a string: ");
scanf("%s", string);
printf("Your number is: %d\n", *ptr);
printf("String is: %s\n", ptr2);
return 0;
}
答案 1 :(得分:0)
<强> 1 强>
ptr2
的类型为int *,string
是一个字符数组。由于它们的类型不同,您无法使用string
<指向ptr2
/ p>
您必须将ptr2
的类型更改为char*
。 char* ptr2;
2
如果没有符号&
或sizeof
opretator,数组只会转换为指向数组第一个元素的指针。这意味着string
变为{{1}类型现在两个变量都相同,你可以这样做:char*
;
大多数新C程序员错误地输入ptr2 = string
这是错误的。如上所述ptr2 = &string
不会转换为指向第一个元素的指针而string
类型是&string
。同样,两个变量必须具有相同的类型,以便char(*)[]
可以更改为ptr2
,但这会导致令人惊讶的结果:char (*ptr2)[]
现在是整个数组的大小