将字符串中的字符复制到 C 中的另一个字符串



我有一个字符串 AAbbCC,我需要的是复制前两个并将它们添加到数组中,然后复制中间的两个并将它们添加到数组中,最后最后两个并将它们添加到数组中。

这就是我所做的:

char color1[2];
char color2[2];
char color3[2];
strncpy(color1, string, 2); // I take the first two characters and put them into color1
// now I truncate the string to remove those AA values:
string = strtok(string, &color1[1]);
// and when using the same code again the result in color2 is bbAA:
strncpy(color2, string, 2); 

它传递了那些 bb 但也传递了前一个的 AA.. 即使数组只有两个地方,当我使用 strtol 时,它给了我一些很大的价值,而不是我正在寻找的 187 .. 如何摆脱它? 或者如何使其以其他方式工作?任何建议将不胜感激。

首先,您需要为添加 +1 的大小。

char color1[3];
char color2[5];

然后:

strncpy(color1, string, 2);
color1[3] = '';
strncpy(color2, string + 2, 4); 
color2[4] = '';

假设

char *string = "AAbbCC"; 
printf("color1 => %sncolor2 => %sn", color1, color2);

输出为:

color1 => AA
color2 => bbCC

我希望这对你有所帮助。

更新

您可以编写一个 substr() 函数来获取字符串的一部分(从 x 到 y),然后复制到字符串中。

char * substr(char * s, int x, int y)
{
    char * ret = malloc(strlen(s) + 1);
    char * p = ret;
    char * q = &s[x];
    assert(ret != NULL);
    while(x  < y)
    {
        *p++ = *q++;
        x ++; 
    }
    *p++ = '';
    return ret;
}

然后:

char *string = "AAbbCC"; 
char color1[3];
char color2[4];
char color3[5];
char *c1 = substr(string,0,2);
char *c2 = substr(string,2,4);
char *c3 = substr(string,4,6);
strcpy(color1, c1);
strcpy(color2, c2);
strcpy(color3, c3);
printf("color1 => %s, color2 => %s, color3 => %sn", color1, color2, color3);

输出:

color1 => AA, color2 => bb, color3 => CC

不要忘记:

free(c1);
free(c2);
free(c3);

好吧,color1color2 是两个字节长 - 您没有空间容纳 \0 终止符。当您将其中一个视为字符串时,您会得到更多您想要的字符。如果你把它们看成两个角色,你会得到正确的结果。

您应该将它们定义为 3 个字符长,并将 \0 放在末尾。

相关内容

  • 没有找到相关文章

最新更新