如何使用指针读取和打印数字和字符串?

How to read and print number and string using pointers?

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);
}

它要求输入之后是打印数字而不是打印字符串。它显示的不是字符串,而是 分段错误。

以上程序是读取并打印用户的号码和姓名。这是期待的程序,但它不能正常工作。

在您的程序中,ptr2 声明为整数指针,您将其指向 stringptr2 应该是类型 char *.

在此声明中:

ptr2= &string;

您不需要在数组名称前给出 & 运算符。数组名称转换为指向数组对象初始元素的指针。所以,应该是:

ptr2 = string;

如果您使用 scanf 从用户那里获取输入字符串,请确保防止缓冲区溢出。检查 this and 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;
}

很高兴通过它一次:
Best way to get input from the user in C.

1

ptr2 是 int* 类型,string 是 characters.Since 的数组,它们的类型不同,你不能用 [=10= 指向 string ]

您必须将 ptr2 的类型更改为 char*char* ptr2;

2

没有符号 &sizeof opretator 数组简单地转换为指向第一个元素的指针 array.Which 意味着 string 成为类型char*。现在让两个变量的类型相等,您可以这样做:ptr2 = string

大多数新的 C 程序员都会犯输入 ptr2 = &string 的错误,即上面提到的 wrong.As string 不会转换为指向第一个元素的指针和 &string type 是 char(*)[]。同样,两个变量必须具有相同的类型,因此 ptr2 可以更改为 char (*ptr2)[],但这会导致令人惊讶的结果:ptr++ 现在是整个数组。