我该怎么做才能读取c中的字符串?

时间:2017-01-24 08:31:11

标签: c string

int main(){
    char s[]="hi ";    
    char t[55];
    fgets(t,55,stdin); 
    strcat(s,t);
    puts(s);
}

我想连接字符串s和输入的字符串t,但我没有得到任何输出。我尝试使用gets来阅读string,但编译器说"使用获取可能是危险的"。我该怎么办?

4 个答案:

答案 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)