为什么不能将我的字符串复制到另一个字符串?

时间:2016-10-04 23:33:00

标签: c

我在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,但它仍然无法工作。有任何想法吗?我还没有线索。

1 个答案:

答案 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, " ");
    ^~~~~~~~~~~~~~~~~~~~~~~~~