在代码下面运行时,我将错误地将值赋给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';
}
答案 0 :(得分:1)
因为你将str2连接到str1的末尾,所以str1需要足够大以容纳完整的字符串,所以你可能会超越str1,试试
char str1[25+25], str2[25];
答案 1 :(得分:1)
所以你正在获得访问声音......
问题是你的缓冲区可能已经溢出,你的代码中没有长度检查......
您分配的缓冲区长度仅为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
的手册页答案 2 :(得分:0)
之后丢失的分号
while(*s1!='\0') // Checking Null character
s1++
是你的问题,因为代码是,每次在s1中有一个字符时都会执行第二个while循环。