[英]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.