我在下面提到的程序中有问题为pointer.String连接程序赋值(* s1 = * s2)

时间:2014-04-27 13:47:06

标签: c string pointers string-concatenation

在代码下面运行时,我将错误地将值赋给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';
}

3 个答案:

答案 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循环。