gpt4 book ai didi

c - 我在下面提到的程序中遇到问题,为指针分配一个值。字符串连接程序(* s1 = * s2)

转载 作者:行者123 更新时间:2023-11-30 21:42:59 25 4
gpt4 key购买 nike

运行下面的代码时,我在将值分配给 s1 指针时遇到错误

#include<stdio.h>

void concat(char*, char*);

//Main Program
void main(void)
{
char str1[25], str2[25];
printf("\nEnter First String:");
gets(str1);
printf("\nEnter Second String:");
gets(str2);
//Function call
concat(str1, str2);
printf("\nConcatenated String is %s", str1);
}

void concat(char *s1, char *s2) {
// Checking Null character
while (*s1 != '\0')
s1++;
//Checking Null character
while (*s2 != '\0')
{
*s1 = *s2; //<-- Getting error in this line
s1++;
s2++;
}
*s1 = '\0';
}

最佳答案

所以你的访问权限被破坏了......

问题是您的缓冲区可能溢出,并且您的代码中没有长度检查...

您分配的缓冲区只有 25 个字节长

char str1[25], str2[25];

因此,要引入长度检查,请向 concat 添加一个额外的参数,该参数告诉输出缓冲区的长度,如下所示

void concat(char *s1, char *s2, int len){
// Checking Null character
while (*s1 != '\0' && len > 0)
s1++, len--;
//Checking Null character
while (*s2 != '\0' && len > 0)
{
*s1 = *s2; //<-- Getting error in this line
s1++;
s2++;
len--;
}
if (len > 0) // only set the null terminator if we have space
*s1 = '\0';
}

然后这样调用它

concat(str1, str2, 25);

然后还阅读 strncat 的手册页

关于c - 我在下面提到的程序中遇到问题,为指针分配一个值。字符串连接程序(* s1 = * s2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23324186/

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