[英]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
你在做一件危險的事。 str1
和str2
是固定大小的 arrays,而str1
沒有足夠的空間容納您要復制到其中的內容。 結果導致未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.