【发布时间】:2019-01-22 10:32:57
【问题描述】:
所以我读到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;
}
但我在这里写的不是这样:
#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;
}
这个程序最终将两者相加,而没有考虑到目标字符串不够大。为什么会这样?
【问题讨论】:
-
未定义的行为包括“似乎有效”。
-
您可能预计会出现某种错误。虽然没有报告错误,但您的代码仍然是错误的:它没有定义您的代码在执行时将做什么。这可能是一个微妙的点,但却是一个重要的点。例如:stackoverflow.com/questions/2397984/… 或 en.wikipedia.org/wiki/Undefined_behavior
-
欢迎来到本站!查看how-to-ask page 了解更多关于提出问题以吸引高质量答案的信息。如果评论者要求,您可以edit your question 提供更多信息。感谢您包含您尝试过的代码 --- 您从这两个程序中得到了什么输出?
-
您的第一个程序比您的第二个程序更糟糕。指针
src和dest指向哪里?? -
你认为输入是
fgets(src, 10, stdin);在哪里写的;特别是在第一个代码示例的情况下?这是讨论 strcat 操作的重要基础。