gpt4 book ai didi

c - 为什么 strcpy 不会将我的字符串复制到另一个字符串中?

转载 作者:行者123 更新时间:2023-11-30 20:00:50 24 4
gpt4 key购买 nike

我正在使用 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");
}

为什么strcpy不将sentenceCopy复制到sentence中?我似乎无法弄清楚这一点。谢谢。

编辑:感谢您的回答。然而,尽管我将句子复制的长度从+1更改为+2,但它仍然不起作用。有任何想法吗?我不知道。

最佳答案

您在此处声明的缓冲区:

char sentenceCopy[strlen(sentence)+1];

足够容纳句子的内容。使用 strcat 向其附加另一个字符会溢出缓冲区,从而导致未定义的行为。

顺便说一句,这个错误实际上可以被智能编译器发现:

# clang --analyze test.c
test.c:11:5: warning: String copy function overflows destination buffer
strcat(sentenceCopy, " ");
^~~~~~~~~~~~~~~~~~~~~~~~~

关于c - 为什么 strcpy 不会将我的字符串复制到另一个字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39863287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com