将星号传递给c中的字符串
Passing an Asterisk into a string in c
我有一个关于将 * 放入连接字符串并让它打印出星号的问题。我的代码需要 2 个参数字符串,并且需要 return 一个指针,该指针是连接的第一个字符串和第二个字符串 BUT 我需要它在每个字符之间有 *。 (例如:字符串 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 != '[=10=]'){
*p3 = *p1;
p1++;
p3++;
*p3 = *asterix; // Needs to add an *, after printing the first element.//
}
while(*p2 != '[=10=]'){
*p3 = *p2;
p2++;
p3++;
*p3 = *asterix;
}
return str4;
}
我只提供了我的函数,因为这是我遇到问题的代码的唯一部分。编辑:我的 Malloc 中的 29 是为了考虑星号和 NULL 字符(参数字符串最多 30 个字符)感谢社区,我解决了添加星号的问题,现在我遇到了分段错误,这应该玩得开心。
asterix
不需要是一个指针,它只是一个字符。
您在分配结果字符串时没有使用正确的大小。两个原始字符串中的每个字符需要有 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 != '[=10=]'){
*p3++ = *p1++;
*p3++ = asterix; // Needs to add an *, after printing the first element.//
}
while(*p2 != '[=10=]'){
*p3++ = *p2++;
*p3++ = asterix;
}
// Replace last asterisk with null byte
if (p3 > str4) {
p3--;
}
*p3 = '[=10=]';
return str4;
}
我有一个关于将 * 放入连接字符串并让它打印出星号的问题。我的代码需要 2 个参数字符串,并且需要 return 一个指针,该指针是连接的第一个字符串和第二个字符串 BUT 我需要它在每个字符之间有 *。 (例如:字符串 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 != '[=10=]'){
*p3 = *p1;
p1++;
p3++;
*p3 = *asterix; // Needs to add an *, after printing the first element.//
}
while(*p2 != '[=10=]'){
*p3 = *p2;
p2++;
p3++;
*p3 = *asterix;
}
return str4;
}
我只提供了我的函数,因为这是我遇到问题的代码的唯一部分。编辑:我的 Malloc 中的 29 是为了考虑星号和 NULL 字符(参数字符串最多 30 个字符)感谢社区,我解决了添加星号的问题,现在我遇到了分段错误,这应该玩得开心。
asterix
不需要是一个指针,它只是一个字符。
您在分配结果字符串时没有使用正确的大小。两个原始字符串中的每个字符需要有 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 != '[=10=]'){
*p3++ = *p1++;
*p3++ = asterix; // Needs to add an *, after printing the first element.//
}
while(*p2 != '[=10=]'){
*p3++ = *p2++;
*p3++ = asterix;
}
// Replace last asterisk with null byte
if (p3 > str4) {
p3--;
}
*p3 = '[=10=]';
return str4;
}