[英]Concatenate two string program not giving correct output
#include<stdio.h>
char * sstrcat(char*,char*);
void main() {
char *c;
char s[100] = "abcde";
char t[] = "fghi";
c = sstrcat(s,t);
printf("%s",c);
}
char* sstrcat(char *s,char *t) {
char* temp = s;
while(*s++ != '\0');
while((*s++ = *t++) != '\0');
return temp;
}
以上編寫的代碼我得到 output abcde但預期 output 是字符串s
和t
的串聯。
請幫我弄清楚我在做什么錯誤? 謝謝。
這條線
while(*s++ != '\0');
比較完成后將增加s
,留下'\0'
,它是數組中的字符串終止符。
如果您可以使用調試器,您會發現所有值都在您的數組中,只是printf
將停止在'\0'
由於 '\0' (在執行while(*s++;= '\0');
之后),只需將字符串迭代器移回一個字符即可修復您的代碼。
解釋:
您s
字符串是"abcde\0"
。 在第一個 while 循環之后,迭代器將位於'\0'
。 如果你把它留在那里,你將連接兩個字符串以獲得結果"abcde\0fghi\0"
由於第一個'\0'
打印"abcde"
。
相反,如果您將s
字符串迭代器移回一個 position 和( s--
),您將得到這個字符串作為結果"abcdefghi\0"
,它會按預期打印字符串。
固定代碼:
#include<stdio.h>
char * sstrcat(char*,char*);
void main() {
char *c;
char s[100] = "abcde";
char t[] = "fghi";
c = sstrcat(s,t);
printf("%s\n",c);
}
char* sstrcat(char *s,char *t) {
char* temp = s;
while(*s++ != '\0');
s--;
while((*s++ = *t++) != '\0');
return temp;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.