gpt4 book ai didi

c - 为什么这个字符数组会出现 Seg Fault

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:44 27 4
gpt4 key购买 nike

谁能给我解释一下为什么在初始化一个char数组时,如果数组大小留空,像这样

char str1[] = "Hello";

程序会报错,但是如果这样指定

char str1[10] = "Hello";

它工作正常。

这是完整的程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char concat_string(char str[], char str2[], char destination[], unsigned int bufferSize);

int main(int argc, char *argv[])
{
unsigned int bufferSize = 64;
// Both str1 and str2 must be defined
// or else the program will seg fault.
char str1[] = "Hello ";
char str2[] = "World";
char concatenatedString[bufferSize];

concat_string(str1,str2,concatenatedString,bufferSize);

printf("The concatenated string is: \n%s\n", concatenatedString);
return 0;
}


char concat_string(char str[], char str2[], char destination[], unsigned int bufferSize)
{
char buffer[bufferSize];
strncat(str, str2, bufferSize);
strncpy(buffer,str, bufferSize);
strncpy(destination,buffer,bufferSize);
return *destination;
}

最佳答案

您的 concat_string 函数中存在缓冲区溢出:

strncat(str, str2, bufferSize);

您的 str 只有七个字节的空间,并且在您尝试将 str2 附加到它之前它已经满了。你很幸运:

char str1[10] = "Hello";

因为您仍然没有分配足够的空间来将 "World" 附加到它;您还缺少此版本 str1 的尾随空格,但这与您的段错误无关。您的 concat_string 应该将 str 直接复制到 destination,然后将 str2 附加到 destination .这也可以避免改变 strstr2 参数,这样会更礼貌;您也没有传递 strstr1 数组的大小,因此无法知道是否有空间可以向它们追加任何内容。

关于c - 为什么这个字符数组会出现 Seg Fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839147/

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