簡體   English   中英

為什么我不能正確打印第一個/最后一個字符?

[英]Why I can't print first/last character right?

我的輸出字符串需要是輸入字符串的回文。 它幾乎完美無缺,但我在輸入字符串的第一個字符時遇到問題,我的新字符串不會打印它(本質上我的新字符串不會打印最后一個字符)。 另外 strrev() 在 Ubuntu 上不起作用,所以我需要在不使用該函數的情況下執行此操作。

#include <stdio.h>
#include <string.h>
int main(void){

    int i,j=0;

    char input_str[10];
    char new_str[10];

    printf("Enter characters:\n");

    gets(input_str);

    for(i=strlen(input_str)-1;i>0;i--){

        new_str[j]=input_str[i];
        j++;

    }

    printf("Output:\n");
    printf("%s", new_str);

    return 0;

}


對於初學者來說, gets函數是不安全的函數,不受 C 標准支持。

您應該使用標准的 C 函數fgets

您的代碼有兩個問題。 第一個在這個循環中

for(i=strlen(input_str)-1;i>0;i--){

    new_str[j]=input_str[i];
    j++;

}

索引 i 等於 0 被跳過使用它來復制源字符串的相應字符。

第二個是目標數組沒有附加終止零字符。

這是一個演示程序,它展示了如何實現對源字符串進行反向復制的函數。

#include <stdio.h>
#include <string.h>

char * reverse_copy( char *dsn, const char *src )
{
    size_t n = strlen( src );

    size_t i = 0;

    for ( ; i < n; i++ )
    {
        dsn[i] = src[n - i - 1];
    }

    dsn[i] = '\0';

    return dsn;
}

int main(void) 
{
    enum { N = 10 };
    char input_str[N] = "";
    char new_str[N];

    printf( "Enter a string (less than %zu symbols): ", ( size_t )N );

    fgets( input_str, N, stdin );

    input_str[ strcspn( input_str, "\n" ) ] = '\0';

    printf( "\"%s\"\n", input_str );
    printf( "\"%s\"\n", reverse_copy( new_str, input_str ) );

    return 0;
}

程序輸出可能如下所示

Enter a string (less than 10 symbols): Hello
"Hello"
"olleH"

i從不為零。 這就是為什么第一個字符 ( input_str[0] ) 被忽略的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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