【问题标题】:A Beginner's scanf_s() Disability初学者的 scanf_s() 残疾
【发布时间】:2010-10-04 16:35:29
【问题描述】:
int main(void) {
    char tmp, arr[100];
    int i, k;

    printf("Enter a string: ");
    scanf_s("%s", arr);

    for ( k = 0, i = (strlen(arr) - 1); k < (int) (strlen(arr) / 2); --i, ++k) {
            tmp = arr[k];
            arr[k] = arr[i];
            arr[i] = tmp;
    }

    puts(arr);

    return 0;
}

我知道 scanf_s() 有一些奇怪的地方,但我无法解决这个问题。 我的代码使用 scanf() 效果很好,但这不会反转数组的元素:( 任何帮助将不胜感激。 谢谢。

【问题讨论】:

    标签: c scanf c11 crt tr24731


    【解决方案1】:

    scanf_s 要求以字符为单位的缓冲区大小作为第二个参数传递。

    int iNumFilled1 = scanf_s("%s", arr);
    int iNumFilled2 = scanf_s("%s", arr, _countof(arr));
    assert(iNumFilled1 == 0);
    assert(iNumFilled2 == 1);
    

    您还可以传递宽度说明符。如果通过并且它不适合缓冲区,您将只有第一个“指定宽度”字符。

    //Input a string longer than 99 chars
    int iNumFilled3 = _tscanf_s(_T("%99s"), arr, _countof(arr));
    assert(iNumFilled3 == 1);
    
    //Again insert a string longer than 99 chars, but with no width specifier
    int iNumFilled4 = _tscanf_s(_T("%s"), arr, _countof(arr));
    assert(iNumFilled4 == 0);
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2020-06-20
      • 2022-01-17
      • 2012-12-20
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多