繁体   English   中英

使用 C 中的指针进行字符串连接!

[英]String concatenation using pointers in C!

我使用 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) 请帮忙!!

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

这里

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

代码还有其他问题。 也许您应该尝试使用string.h strcat代替?

您正在修改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 不足以容纳两个字符串。

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

在第一个循环中,您循环直到*str==0 当它最终发生时,您仍然会增加str1 ,而保留'\0'原样。

这更正确:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM