参加以下计划:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[8] = "Hello, ";
char b[7] = "world!";
strcat(a, b);
cout << a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,a并且b其大小与指定的字符串相同.
该文件规定,对于strcat(a, b)工作,a需要足够大,以包含串联的结果字符串.
不过,cout << a显示"Hello, world!".我进入未定义的行为吗?
所以我读到该strcat函数将被仔细使用,因为目标字符串应该足够大以容纳其自己和源字符串的内容.我写的以下程序也是如此:
#include <stdio.h>
#include <string.h>
int main(){
char *src, *dest;
printf("Enter Source String : ");
fgets(src, 10, stdin);
printf("Enter destination String : ");
fgets(dest, 20, stdin);
strcat(dest, src);
printf("Concatenated string is %s", dest);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但对于我在这里写的那个不是这样的:
#include <stdio.h>
#include <string.h>
int main(){
char src[11] = "Hello ABC";
char dest[15] = "Hello DEFGIJK";
strcat(dest, src);
printf("concatenated string %s", dest);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序最终添加两者而不考虑目标字符串不够大.为什么会这样?