在c ++中,scanf_s为空

时间:2014-01-03 13:32:45

标签: c++ visual-studio scanf

我无法使用此代码,因为我无法编写任何文本。 如何通过阅读解决这个问题?

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"




int _tmain(int argc, _TCHAR* argv[])
{
    char str[1024];

    printf("Input text: ");
    scanf_s("%c", str);

    _asm                                                                                                                                                                                                                                        
    {
    //some assembly code
    }


    printf("\n\nResult = %s", str);

    printf("\n\n[Press any key]");
    _getch();

    return 0;
}

结果是

Input text: sdf

Result =

[Press any key]

任何想法?我使用的是Visual Studio 2013。

4 个答案:

答案 0 :(得分:3)

我不知道函数scanf_s,所以我查了documentation。它指出,需要为格式说明符scanfscanf_scC指定s S缓冲区大小的char str[1024]; printf("Input text: "); scanf_s("%s", str, 1024); 。作为通常的第二个参数。一个例子:

{{1}}

文档还指出,如果潜在的缓冲区溢出,则不会向缓冲区写入任何内容。

答案 1 :(得分:2)

中的%c格式说明符
scanf_s("%c", str);

请求读取一个char

printf("\n\nResult = %s", str);

稍后请求打印str的内容,直到第一个char的值'\0'为止。这会导致未定义的行为,因为您只初始化了str的第一个元素。您有时可能会设法打印一系列堆栈内存;其他时候你的程序会崩溃。

假设您想要读取以空字符结尾的字符数组,则需要在读取用户输入时使用%s格式说明符:

scanf_s("%s", str);

答案 2 :(得分:0)

使用如下..

scanf("%[0-9a-zA-Z ]s", str);

%c只会从输入值中读取一个字符。

%s将读取一个单词(直到空格)

scanf %s

Any number of non-whitespace characters, stopping at the first whitespace character found. A terminating null character is automatically added at the end of the stored sequence.

答案 3 :(得分:0)

我遇到了同样的问题,我收集了几个答案,并让用户用空格和数字写下他的名字,谢谢!

<!DOCTYPE html>
<html>
  <head>
    <link href="./styles.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Anaheim" rel="stylesheet">
    <meta charset="UTF-8">
    <title>NASA Photo Of The Day</title>
  </head>
  <body>
    <div id='app'>
      <section class='hero'>
      <h1 class='title'>{{ title }}</h1>
    </section>
    <section class='picture-area'>
      <div class='info'>
        <h2>{{ images[currentNumber].title }}</h2>
        <p v-bind='description'>{{ description }}</p>
        <img class='image-of-day' :src='images[currentNumber].image' />
        <p class='date'>{{ images[currentNumber].date }}</p>
        <button :disabled="!isPrevPhotoAvailable" v-on:click="previous" class='backward'>previous</button>
        <button :disabled="!isNextPhotoAvailable" v-on:click="next" :class="{disabledButton: !isNextPhotoAvailable}" class='forward'>next</button>
      </div>
    </section>
    </div>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="https://unpkg.com/axios@0.12.0/dist/axios.min.js"></script>
  <script src='./index.js'></script>
  </body>
</html>