int main(){
char s[]="hi ";
char t[55];
fgets(t,55,stdin);
strcat(s,t);
puts(s);
}
我想连接字符串s
和输入的字符串t
,但我没有得到任何输出。我尝试使用gets
来阅读string
,但编译器说"使用获取可能是危险的"。我该怎么办?
答案 0 :(得分:3)
strcat(s,t);
超出了目标内存缓冲区s
,因为它只能容纳4个字符(其中一个字符被NUL终结符占用)。
因此,程序的行为未定义。
使s
的大小足以容纳其初始内容加上 t
中可能的最大字符串。
答案 1 :(得分:3)
数组s
没有足够的空间可以附加t
。你需要充分增加它的大小。
char s[]="hi ";
是一个包含4个字符的数组。它不能容纳更多你想要追加的字节。因此,您的代码有undefined behaviour。
如果增加数组大小,例如,增加到100:
char s[100]="hi ";
现在,您可以向其追加96个字节。
在C语言中,您总是要考虑超越缓冲区。
注意:在尝试追加fgets()
之前,您还应该检查t
是否成功。如果fgets()
失败,则t
的内容不确定。
答案 2 :(得分:3)
字符数组var hashSet = new HashSet<CompanyInfo>(CompanyInfos);
应该有足够的内存来容纳数组s
中读取的字符串。因此,它应至少声明为
t
函数char t[55];
char s[sizeof( t ) + 3] = "hi ";
也可以用新行字符追加字符串。一般来说,你应该删除它。这可以通过以下方式完成
fgets
考虑到根据C标准函数main,没有参数应该声明为
t[strcspn( t, "\n" )] = '\0';
程序必须包含标题
int main( void )
答案 3 :(得分:-1)