自动在strcat函数中附加字符串

Kar*_*hah 1 c c++

我有strcat()函数的问题.请解释一下这个功能是如何工作的.

char a[] = "AT";
char x[] = "KA";
char y = 'X';
sen(a);
s = strcat(a, "+CMGF=");
sen(s);
s = strcat(s, "\r\n");
sen(s);
s = strcat(s, &y);
sen(s);
getch();
return 0;
Run Code Online (Sandbox Code Playgroud)

S是一个glopal字符指针&sen()是一个只打印所包含字符串数据的函数.现在s的最终值是"AT + CMGF =\r \n \nXKA".

它会自动将x数组附加到s中的最后一个,尽管我还没有编写它的代码.

为什么会这样?请解释一下

Mat*_*son 5

char a[] = "AT"将创建一个长度恰好为3个字符的字符串.当你接着strcat别的东西时,它会在a变量之后写入内存.之前恰好是一些未使用过的空间x.[从技术上讲,当你编写外部空间时会发生什么a是未定义的行为,并且绝对不能保证KAfrom x实际上只是那个精确的距离a,或者代码不会以某种方式崩溃 - 未定义的行为意味着C++标准没有解释会发生什么,并且允许编译器和/或运行时库在这种行为期间以某种其他方式"不是您所期望的"崩溃或表现 - 您的系统可能做的任何事情调用UB时允许]

确保目标字符串a是BIG ENOUGH来保存你的字符串,你就不会遇到这个问题.