C 在字符串中每3个字符后插入字符

C 在字符串中每3个字符后插入字符,c,pointers,C,Pointers,对于从str1复制到str2的每三个字符,字符ch将插入到str2中 (Input1) Enter a string: abc de (Input2) Enter a character to be inserted: # Output: abc# de 代码: 但是,我的代码无法运行。我可以知道问题出在哪里吗?就像评论中提到的那样,代码有一些问题 ptr3 = &str2 在此行中,您没有将字符串分配给ptr3。而是指定包含字符串起始地址的指针的地址。例如:假设字符串中的第一

对于从str1复制到str2的每三个字符,字符ch将插入到str2中

(Input1) Enter a string:  abc de 
(Input2) Enter a character to be inserted: # 
Output: abc# de
代码:


但是,我的代码无法运行。我可以知道问题出在哪里吗?

就像评论中提到的那样,代码有一些问题

ptr3 = &str2
在此行中,您没有将字符串分配给
ptr3
。而是指定包含字符串起始地址的指针的地址。例如:假设字符串中的第一个字符位于地址位置1000。然后,
str3
包含值1000。但是,
str3
本身将位于其他地方。让我们假设它位于2000年。然后,
ptr3
包含值2000,增量后,它将指向2001,依此类推。因此,您会得到错误和危险的值

(ptr2=ch;*ptr2!='\0';ptr2++)的
行中还有一个问题。您正在将ch的值分配给ptr2。这应该给你一个警告。同样,ptr2指向的内存被更改。因此,*ptr2尝试取消对该内存位置的引用

我将为此使用的代码:

void insertChar(char *str1, char *str2, char ch) {
    int count = 0;
    while (*str1) {
        *str2++ = *str1++;
        ++count;
        if (count == 3) {
            *str2++ = ch;
            count = 0;
        }
    }
    *str2 = '\0';
}
一些建议:

  • 尝试声明尽可能接近其用法的变量
  • 编译程序时使用
    -Wall
    选项
void insertChar(char *str1, char *str2, char ch) {
    int count = 0;
    while (*str1) {
        *str2++ = *str1++;
        ++count;
        if (count == 3) {
            *str2++ = ch;
            count = 0;
        }
    }
    *str2 = '\0';
}