如何在c中正确printf整数和字符串?

use*_*474 19 c string printf input

我有以下代码:

char *s1, *s2;
char str[10];

printf("Type a string: ");
scanf("%s", str);

s1 = &str[0];
s2 = &str[2];

printf("%s\n", s1);
printf("%s\n", s2);
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,输​​入输入"A 1"如下:

Type a string: A 1
Run Code Online (Sandbox Code Playgroud)

我得到了以下结果:

A
?<?
Run Code Online (Sandbox Code Playgroud)

我正在尝试将第一个字符作为字符串读取,将第三个字符作为整数读取,然后在屏幕上打印出来.第一个角色总是有效,但屏幕只会在那之后显示随机的东西....我该如何解决?

谢谢

sbl*_*lom 30

你走在正确的轨道上.这是一个更正版本:

char str[10];
int n;

printf("type a string: ");
scanf("%s %d", str, &n);

printf("%s\n", str);
printf("%d\n", n);
Run Code Online (Sandbox Code Playgroud)

让我们来谈谈这些变化:

  1. 分配一个int(n)来存储你的号码
  2. 告诉你scanf首先读一个字符串,然后读一个数字(%d意思是数字,正如你已经知道的那样printf

这就是它的全部内容.您的代码仍然有点危险,因为任何超过9个字符的用户输入都会溢出str并开始践踏您的堆栈.


Dan*_*her 5

scanf("%s",str)仅扫描直到找到空白字符.使用输入"A 1",它将仅扫描第一个字符,因此s2指向碰巧进入的垃圾str,因为该数组未初始化.