0

これが私のコードです:

#include<stdio.h>
#define MAXLINE 100

/*print the reverse of the input*/

int getline1(char line[], int maxline);
char *reverse(char);

main(){
    int len;
    char line[MAXLINE];
    char *rp;
    while ((len = getline1(line, MAXLINE)) > 0)
            rp = reverse(line);
            printf("%s", *rp);
    return 0;
}
int getline1(char s[], int lim){
    int c, i;

    for (i = 0; (c=getchar()) != EOF && c != '\n'; i++)
            if (i > lim-1)
                    continue;
            else
                    s[i] = c;
    if (c == '\n'){
            s[i] = c;
            i++;
    }
    s[i] = '\0';
    return i;
}
char *reverse(char ca[]){
    int i;
    int i1 = 0;
    char *rp;
    char reversed[MAXLINE];
    for (i = MAXLINE-1; i >= 0; i--){
            reversed[i1] = ca[i];
            i1++;
    }
    rp = reversed;
    return rp;
}

しかし、コンパイルしようとすると、次のエラーが発生します。

reverse.cpp: In function ‘int main()’:
reverse.cpp:14:20: error: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
reverse.cpp:7:7: error:   initializing argument 1 of ‘char* reverse(char)’ [-fpermissive]
reverse.cpp:15:19: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat]

私はC++の経験があまりありません。私は何が間違っているのですか?char配列へのポインタを作成して返したいだけです。

4

3 に答える 3

3

char配列へのポインタを作成して返したいだけです。

文字列を返したいようです。これはchar配列へのポインタではありません。プログラムがコンパイルされたとしても、自動オブジェクトへのポインタを返すときにUBを呼び出します。また、コードには他にもかなりの数のランタイムエラーがあります。コンパイル時のエラーも発生したため、コンパイラがプログラムを受け入れなかったのは幸運でした。このC++プログラムは、意図したことを実現します。

#include <string>
#include <iostream>

std::string reverse(std::string val) {
    return std::string(val.rbegin(), val.rend());
}
int main() {
    std::string str;
    while(std::getline(std::cout, str))
        std::cout << reverse(str);
}

私は何が間違っているのですか?

あなたはC++11ではなくC89を学んでいます。それらは本当に異なるものです。

C ++のコーディングを学びたい場合は、、std::stringおよびその他の標準ライブラリを学ぶ必要があります。char*、、、char[]およびでどこにも到達しませんMAGIC_BUFFER_SIZE

于 2012-09-01T05:37:17.483 に答える
2

最初に関数プロトタイプを宣言します

char *reverse(char);

しかし、実際の関数は次のように宣言されています

char *reverse(char ca[])

それはあなたの問題だ。

于 2012-09-01T05:34:37.857 に答える
0

何を達成しようとしていますか?コードに論理エラーがあります...

    while ((len = getline1(line, MAXLINE)) > 0)
        rp = reverse(line);
        printf("%s", *rp);

この部分はすべての /n 文字でリバースを呼び出しますが、printf は決して呼び出されません...また、100 文字の文字列があり、リバースは先頭の文字を逆文字列の最後に置きます.. 5 文字の文字列がある場合は、最初の95桁にゴミがあり、次に必要な5文字...

于 2012-09-01T05:48:18.393 に答える