簡體   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