gpt4 book ai didi

c - 初学者的 scanf_s() 残疾

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:26 26 4
gpt4 key购买 nike

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() 运行良好,但这不会反转数组的元素:(任何帮助将不胜感激。谢谢。

最佳答案

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

关于c - 初学者的 scanf_s() 残疾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com