gpt4 book ai didi

c - 使用 strcpy 在我的代码中出现段错误

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

我在 strcpy(buffer_two, argv[1]); 之后遇到段错误 不确定这里出了什么问题,我希望能帮助您了解问题所在以及为什么会出现段错误。

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

int main(int argc, char *argv[])
{
int value = 5;
char buffer_one[8], buffer_two[8];

strcpy(buffer_one, "one"); // Put "one" into buffer_one
strcpy(buffer_two, "two"); // Put "two" into buffer_two
printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);

printf("\n[STRCPY] copying %d bytes into buffer_two\n\n", strlen(argv[1])); //Copy first argument into buffer_two

strcpy(buffer_two, argv[1]); // <---- here

printf("[After] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
printf("[After] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}

最佳答案

段错误有两个可能的原因。

1) 没有 argv[1] ,即您尝试从 NULL 指针复制(即...如果程序启动时没有参数,argv[1 ] 可能会被访问​​,但会返回 NULL 指针。因此,从中复制是非法的,并可能导致段错误)。因此,如果您像 ./program 一样启动程序,程序将崩溃,因为 argv[1] 为 NULL

2) argv[1] 的长度超过了目标,即 7 个​​字符和一个终止 NUL。如果是这样,你写越界并可能导致段错误。

为了让代码正确,请执行以下操作:

int main(int argv,char * argv[])
{
char buffer_two[8];
if ((argc > 1) && (strlen(argv[1]) < 8)) // Make sure arg[1] is there
// Make sure it's not too long
{
strcpy(buffer_two, argv[1]);
}
else
{
printf("Illegal start of program\n");
}
return 0;
}

顺便说一下

当使用 %p 打印指针时,确保转换为 void*

所以这个

printf("[After] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);

应该是

printf("[After] buffer_two is at %p and contains \'%s\'\n", (void*)buffer_two, buffer_two);

关于c - 使用 strcpy 在我的代码中出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50631142/

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