int _tmain(int argc, _TCHAR* argv[])
{
char string1[20], append_string[40];
char *string2 = "APPENDED"; /* string to be appended */
/* prompt for string 1 */
printf("Enter string1: ");
scanf_s("%s", &string1);
while (!strcmp(string1, "done") == 0)
{
printf("Before append. \nString1: %s \nString2: %s\n\n", string1, string2);
mystrappend(string1, string2, append_string);
printf("After append. \nString1: %s \nString2: %s \nAppended string: %s\n\n", string1, string2, append_string);
// prompt for string 1
printf("Enter string1: ");
scanf_s("%s", &string1);
}
return 0;
}
输入后为什么String1
不存储任何东西?
我有stdio.h
,conio.h
,string.h
和stdafx.h
的头文件。
答案 0 :(得分:0)
引自the documentation of scanf_s
,
<强>说明:强>
[...]
与
scanf
和wscanf
不同,scanf_s
和wscanf_s
要求为c
类型的所有输入参数指定缓冲区大小,{{1} },C
,s
或S
中包含的字符串控件集。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。
所以,[]
scanf_s
错误是因为两个原因:
scanf_s("%s", &string1);
需要%s
,但您提供的参数char*
类型为&string1
。这会导致未定义的行为。使用char(*)[20]
代替string1
修复问题#1。 &string1
将会'衰变'#34;指向其第一个元素(string1
)的指针。
使用char*
或sizeof
使用表示缓冲区大小的第三个参数修复问题#2。
解决这些问题后,您的_countof
应该是
scanf_s
或
scanf_s("%s", string1, sizeof(string1));