[英]Segmentation fault in string concatenation using pointers
我试图连接存储在字符指针中的两个字符串,但我做错了。 有人可以指出它是什么吗? 另外,我没有故意使用任何内置功能。
int main()
{
char *a = "abc";
char *b = "def";
char *c;
while(*a != '\0')
{
*c = *a;
a++;
c++;
}
while(*b != '\0')
{
*c = *b;
b++;
c++;
}
*c = '\0';
c -= 6;
while(*c!= '\0')
{
printf("%c", *c);
c++;
}
return 0;
}
你没有为c
分配任何内存
当你这样做时, b
和c
静态分配内存:
char *a = "abc";
char *b = "def";
但是c没有那个,所以你需要使用类似的东西来分配内存:
char *c = malloc (x);
其中x
是您需要容纳要插入的字符的字符数组的总长度(加1,终止NULL)。 你还需要记住在某个地方free ()
它。
由于你没有做任何分配,这一行:
*c = *a;
将产生未定义的行为。
c
未初始化。 您必须在复制值之前对其进行初始化。 例如:
char *c = malloc(strlen(a) + strlen(b) + 1); /* plus 1 for terminating null byte */
if (!c) {
perror("malloc");
exit(EXIT_FAILURE);
}
其他问题是您在打印时没有增加c
:
while(*c!= '\0')
{
printf("%c", *c);
c++;
}
请注意这个声明
c -= 6;
这里很好,但不是很可读。 最好使用临时指针来保存c
的初始位置,这样就不需要这样做了。
如果你不能使用标准的strlen
函数,那么你可以直接自己实现它。
char *c;
使用此行,您可以定义一个变量c
,它是指向char
的指针。 很明显,你的想法是在其中存储字符串a
和b
的串联; 但是,要做到这一点,你需要为结果'a+b'
(串联)字符串提供一些内存 。
你要做的是为目标字符串分配足够的内存,计算要连接的两个源字符串中的字符,以及终止NUL
( \\0
)。 在您的情况下,结果字符串需要3 + 3 + 1 = 7
char
。
您可以在堆栈上分配它们,如下所示:
char result[7];
或者使用malloc()
动态分配。 在这种情况下,您还需要释放调用free()
的内存。
您正在收到错误,因为指针c未初始化。
int main()
{
char *a = "abc";
char *b = "def";
char x ;
char *c = &x; //initializing pointer
while(*a != '\0')
{
*c = *a;
a++;
c++;
}
while(*b != '\0')
{
*c = *b;
b++;
c++;
}
*c = '\0';
c -= 6;
while(*c!= '\0')
{
printf("%c", *c++);//increment pointer
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.