我在C中编码。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void function1(char sentence[])
{
char sentenceCopy[strlen(sentence)+1];
strcpy(sentenceCopy, sentence);
strcat(sentenceCopy, " ");
printf("%s\n", sentence); // Prints the appropriate sentence passed to it
printf("%s\n", sentenceCopy); // Prints "" (nothing), despite being copied
}
void function2(char sentence[], char param2[])
{
function1(sentence);
}
int main(int argc, char *argv[])
{
function2("'this should've been eight chars', said the computer", "should've");
}
为什么没有将句子复制到句子中?我似乎无法解决这个问题。谢谢。
编辑:谢谢你的回答。然而,尽管我将句子长度改为+1到+2,但它仍然无法工作。有任何想法吗?我还没有线索。答案 0 :(得分:4)
您在此声明的缓冲区:
char sentenceCopy[strlen(sentence)+1];
仅 足以容纳sentence
的内容。使用strcat
向其附加另一个字符会溢出缓冲区,从而导致未定义的行为。
顺便提一下,智能编译器实际上可以捕获此错误:
# clang --analyze test.c
test.c:11:5: warning: String copy function overflows destination buffer
strcat(sentenceCopy, " ");
^~~~~~~~~~~~~~~~~~~~~~~~~