[在C中使用指针的字符串连接!

问题描述 投票:0回答:5

我使用C语言中的指针编写了以下用于字符串连接的代码

#include<stdio.h> 
#include<stdlib.h>
#include<string.h>
void strCat(char *str1,char *str2);
int main(void)
{
char str1[] = "Rohit";
char str2[] = "Kumar";  
strCat(str1,str2);
return 0;
}

void strCat(char *str1,char *str2)
{
int i;
char *start;
start = str1;
printf("%s",str1);
while(*str1++ != '\0')
    continue;
while(*str2 != '\0')
    *str1++ = *str2++;
*str1 = '\0';

printf("%s\n",str1);
}

为什么输出是Rohit(null)。请帮助!

c pointers
5个回答
5
投票

首先,str1的长度不足以容纳两个字符串。

这里

while(*str2 != '\0')
    *str1++ = *str2++; /* You are overstepping str1 -> undefined behavior */

代码还有其他问题。也许您应该改用string.h strcat吗?


1
投票

您正在修改str1指针,并在最后将其设置为“ \ 0”,然后输出NULL。我认为这是您需要的:

void strCat(char *str1,char *str2)
{
int i;
char *start;
printf("%s",str1);
while(*str1++ != '\0')
    continue;
start = str1;
while(*str2 != '\0')
    *str1++ = *str2++;
*str1 = '\0';

printf("%s\n",start);
}

而且,正如其他人指出的那样,str1不足以容纳两个字符串。


1
投票
while(*str1++ != '\0')
    continue;
while(*str2 != '\0')
    *str1++ = *str2++;

在第一个循环中,循环直到*str==0。并且当它最终发生时,您仍然会增加str1并保持'\0'不变。

这是更正确的:

while(*str1++ != '\0');
--str1;
while(*str2 != '\0')
    *str1++ = *str2++;

0
投票

您正在做危险的事情。 str1str2是固定大小的数组,str1没有足够的空间容纳要复制到其中的内容。结果导致未定义的行为。


0
投票

当您打印str1时,它将具有null值,因为您已经将str1指针增加到结尾并存储了null值。

打印str1时,它指向null,因此打印null

© www.soinside.com 2019 - 2024. All rights reserved.