簡體   English   中英

連接兩個字符串程序沒有給出正確的 output

[英]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 是字符串st的串聯。

請幫我弄清楚我在做什么錯誤? 謝謝。

這條線

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM