Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符数组和指针字符数组_C - Fatal编程技术网

C 字符数组和指针字符数组

C 字符数组和指针字符数组,c,C,我对这个输出有一些问题。另外,我还想要一些关于如何使用char*str的示例 int main() { char str[5]; scanf_s("%c", &str); printf("%s", str); return 0; } 输入“VI”的输出结果很奇怪。首先,您需要一个指针作为scanf_s的参数,这正是str传递到函数时衰减的结果,因此您不需要&运算符,还需要指定缓冲区大小: scanf_s("%c", str, 5); 您可以找到Micr

我对这个输出有一些问题。另外,我还想要一些关于如何使用
char*str
的示例

int main() {
    char str[5];
    scanf_s("%c", &str);
    printf("%s", str);
    return 0;
}

输入“VI”的输出结果很奇怪。

首先,您需要一个指针作为
scanf_s
的参数,这正是
str
传递到函数时衰减的结果,因此您不需要
&
运算符,还需要指定缓冲区大小:

scanf_s("%c", str, 5);

您可以找到Microsoft文档。

scanf\u s
将指针作为其参数。因此,您不需要使用
&str
,因为
str
在参数表达式等表达式中使用时会隐式转换为指针。您还可以在
scanf\u s
中将缓冲区大小作为参数传递

所以你可以用

scanf_s("%c", str, 5);

其中5是缓冲区大小。传递特定的缓冲区大小将限制您接受的输入超过缺少的大小
scanf
。在
scanf
中,您可能需要比数组或字符串大小更多的输入(例如声明的字符串是
char str[4]
,但您可能需要输入
'Hello'
),这会导致程序因溢出而崩溃。但是在scanf_f中使用特定的缓冲区大小将不允许您接受比缓冲区大小更多的输入。这就是scanf_s的用武之地。

scanf_s
将指针作为输入,就像
printf
一样。您不需要执行
&
您可以给出输入和输出的示例吗?您不需要终止字符串。您可以比“此输出有问题”和“输出结果怪异”更具体一些吗?(通过编辑您的问题来回答,而不是在评论中(视情况而定))。这是我得到的输出。即使我改为scanf_s(“%c”,str),也请参见,and.imgur.com/yRB0I0r这是我得到的输出。即使我改为scanf_s(“%c”,str)