27

我有以下代码:

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

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

Type a string: A 1

我得到以下结果:

A
�<�

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

4

3 回答 3

38

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

char str[10];
int n;

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

printf("%s\n", str);
printf("%d\n", n);

让我们来谈谈变化:

  1. 分配一个 int ( n) 来存储您的号码
  2. 告诉scanf先读入一个字符串,然后读入一个数字(%d表示数字,正如您已经从您的printf

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

于 2012-07-31T02:50:08.563 回答
5

scanf("%s",str)仅扫描直到找到空白字符。使用 input "A 1",它将仅扫描第一个字符,因此s2指向恰好位于 in 的垃圾str,因为该数组未初始化。

于 2012-07-31T02:51:04.403 回答
2

试试这个代码我的朋友...

#include<stdio.h>
int main(){
   char *s1, *s2;
   char str[10];

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

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

   printf("%c\n", *s1);   //use %c instead of %s and *s1 which is the content of position 1
   printf("%c\n", *s2);   //use %c instead of %s and *s3 which is the content of position 1

   return 0;
}
于 2014-06-07T08:17:05.337 回答