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

时间:2018-01-26 10:51:23

标签: c arrays pointers c-strings

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

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

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

2 个答案:

答案 0 :(得分:2)

在您的程序中,ptr2被声明为整数指针,并且您将其指向stringptr2应为char *类型。

在此声明中:

ptr2= &string;

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

ptr2 = string;

如果您使用scanf从用户获取输入字符串,请确保防止缓冲区溢出。查看thisthis

你可以这样做:

#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 :(得分: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)[]现在是整个数组的大小