Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c语言中将星号传递到字符串中_C_String_Concatenation_Dynamic Memory Allocation - Fatal编程技术网

在c语言中将星号传递到字符串中

在c语言中将星号传递到字符串中,c,string,concatenation,dynamic-memory-allocation,C,String,Concatenation,Dynamic Memory Allocation,我有一个问题,关于将*放入一个连接的字符串中,并让它打印出星号。我的代码需要2个参数字符串,并且需要返回一个指针,该指针是连接的第一个字符串和第二个字符串,但我需要它在每个字符之间有*。(例如:字符串1:09876;字符串2;12345结果;0*9*8*7*6*1*2*3*4*5);我的问题不是试图打印这个结果,而是添加了星号,特别是因为C不允许我只声明一个*或有一个指向*的指针。所以我有点困了。这是我的密码 char* widen_stars(char * str1, char *str

我有一个问题,关于将*放入一个连接的字符串中,并让它打印出星号。我的代码需要2个参数字符串,并且需要返回一个指针,该指针是连接的第一个字符串和第二个字符串,但我需要它在每个字符之间有*。(例如:字符串1:09876;字符串2;12345结果;0*9*8*7*6*1*2*3*4*5);我的问题不是试图打印这个结果,而是添加了星号,特别是因为C不允许我只声明一个*或有一个指向*的指针。所以我有点困了。这是我的密码

   char* widen_stars(char * str1, char *str2)
{       
    int ls1 = strlen(str1);
    int ls2 = strlen(str2);

    char *str4 = (char *) malloc(strlen(str1) + strlen(str2)+ 29);
    char *p1 = str1;
    char *p2 = str2;
    char *p3 = str4;
    char *asterix;
    *asterix = '*'; //Pointer pointing to *, won't let me though//
        while(*p1 != '\0'){
        *p3 = *p1;
        p1++;
        p3++;
        *p3 = *asterix; // Needs to add an *, after printing the first element.//
        }
        while(*p2 != '\0'){
        *p3 = *p2;
        p2++;
        p3++;
        *p3 = *asterix;
        }
    return str4;
}

我只提供了我的函数,因为这是我代码中唯一遇到问题的部分。编辑:我的Malloc中的29是用来记录星号和空字符(参数字符串最多有30个字符)我修复了添加星号的问题,感谢社区,现在我遇到了一个分段错误,这应该很有趣。

asterix
不需要是指针,它只是一个字符

char* widen_stars(char * str1, char *str2)
{       
    int ls1 = strlen(str1);
    int ls2 = strlen(str2);

    char *str4 = (char *) malloc(2 * ls1 + 2 * ls2);
    char *p1 = str1;
    char *p2 = str2;
    char *p3 = str4;
    const char asterix = '*';
    while(*p1 != '\0'){
        *p3++ = *p1++;
        *p3++ = asterix; // Needs to add an *, after printing the first element.//
    }
    while(*p2 != '\0'){
        *p3++ = *p2++;
        *p3++ = asterix;
    }
    // Replace last asterisk with null byte
    if (p3 > str4) {
        p3--;
    }
    *p3 = '\0';
    return str4;
}
分配结果字符串时未使用正确的大小。它需要为两个原始字符串中的每个字符指定2个字符——1个用于您要复制的每个字符,1个用于中间的星号

您需要在最终结果中添加空终止符。这可以替换最后一个星号,因为您只能在字符之间使用星号,而不能在每个字符之后使用星号

char* widen_stars(char * str1, char *str2)
{       
    int ls1 = strlen(str1);
    int ls2 = strlen(str2);

    char *str4 = (char *) malloc(2 * ls1 + 2 * ls2);
    char *p1 = str1;
    char *p2 = str2;
    char *p3 = str4;
    const char asterix = '*';
    while(*p1 != '\0'){
        *p3++ = *p1++;
        *p3++ = asterix; // Needs to add an *, after printing the first element.//
    }
    while(*p2 != '\0'){
        *p3++ = *p2++;
        *p3++ = asterix;
    }
    // Replace last asterisk with null byte
    if (p3 > str4) {
        p3--;
    }
    *p3 = '\0';
    return str4;
}

仅供参考,
“*”
是星号字符的整数文本。注意单引号。
char*asterix*asterix=*有两个问题。指针未初始化,
*
不是一种可以指定给它可能指向的位置的值。也许
*asterix='*'
Ya我缺少的是单引号,它解决了我的问题(我也解决了初始化问题,谢谢)。没有必要将星号作为指针。只是
char星号='*'谢谢你的回答;经过一些调整,它起了作用(我只需要添加一个p3+,因为它会将下一个字符串放在星号上)是的,没有注意到缺少额外的增量。我把它改成和作业一起递增。