-1

文字列を回避する方法を見つけましたが、機能させることができないようです。多分それは私が使用しているscanfのせいです。お知らせ下さい :)

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

int do_palindrome(char *str, int offset){
int ok = 1;
int length = strlen(str);

if(length/2 > 0)
    ok = (str[0] == str[length - 1 - offset])?
            do_palindrome(++str, ++offset):0;

return ok;
}
int main(){
int i = 0;
int ok = 0;
char* str[1] ;

    scanf("%c", str[1]);
    ok = do_palindrome(str[0], 0);
    printf("%s is palindrome? : %d\n", str[0], ok);


printf("Finished!");
return 0;

}
4

4 に答える 4

1

あなたが考えているのは構造体のハックです:

typedef struct {
    char s[1];
} String;

int main()
{
    /* allocate 15 extra bytes for the string */
    String *s = malloc(sizeof *s + 15);

これにより、サイズ 1 の配列を宣言し、それを可変長として使用できますが、それを使用するには (malloc を介して) いくらかのメモリを与える必要があります。その後、経由でアクセスできますs

可変長の文字列が必要な場合は、必要な量のデータを malloc する必要があります。少しハックしたい場合 (および Gcc でコンパイルする場合) は、次のようにできます。

char * str;
scanf("%ms", str);
ok = do_palindrome(str, 0);
printf("%s is palindrome? : %d\n", str, ok);
free(str);
于 2012-12-14T12:54:45.410 に答える
0
char* str[1] ;

1 つの char ポインタの配列を宣言します

scanf("%c", str[1]);

単一の文字を読み取りますが、配列の末尾を超えて配置しようとします (C 配列はゼロから始まります)。

文字列(char配列)を読みたいと思います。これを使用して行うことができます

char str[20]; /* change the array size as required */
scanf("%19s", str); /* read one fewer chars than your array size */
于 2012-12-14T12:53:56.980 に答える
0
char* str[10] ;
scanf("%s", str);
ok = do_palindrome(str, 0);
printf("%s is palindrome? : %d\n", str, ok);

文字列を char 型に読み込もうとしていますが、これは間違っており、string 型である必要があります。また、サブルーチン呼び出しには、文字列の最初の文字以外do_palindromeのベース アドレスが含まれている必要があります。str

于 2012-12-14T13:02:11.397 に答える