3

これは、どこかですでに回答されているはずの質問のようですが、満足のいくものを見つけることができないようです。とにかく、次のような関数から返す必要があります。

{ {"foo", "bar"}, {"baz", "foo"}, {"foo", "bar"} }

私は の使用に精通しており、argvその型の意味を理解していますが、何らかの理由で上記の式の型を正しく取得できません。最も内側の部分には常に2つの文字列リテラルがあるため、どちらかのようなものだと思いました

char **s[2] or char *(*s[2])

私が求めているものでなければなりませんが、何らかの理由で、反復して使用しようとすると、順列に関係なく、常に segfault が発生しますprintf。また、コンパイラは、互換性のないポインター型、余分な要素、および中括弧が多すぎることについて常に不平を言っています。これは現在のコードです:

 char *(*s[2]) = { {"foo", "bar"}, {"baz", "spam"}, {"eggs", "ham"} };
4

3 に答える 3

8

あなたは近くにいます。

#include <stdio.h>

int main()
{

    char* s[][2] = { {"foo", "bar"}, {"baz", "spam"}, {"eggs", "ham"} };

    for( int i = 0; i < 3; i++ )
    {
        for(int j = 0; j < 2; j ++)
        {
            printf("%s ",s[i][j]);
        }
    }

}

上記のプリント:foo bar baz spam eggs ham

于 2012-11-12T05:42:12.117 に答える
1

それは簡単です

char *s[3][2] ={ {"foo", "bar"}, {"baz", "spam"}, {"eggs", "ham"} };

少し説明:

char *s ; //   |s| ---> "Only one char array or string"
                          ______
char *s[] ; //  |s| ---> |_s[0]_|--> 1st pointer to char array --> "1st string"
                         |_s[1]_|--> 2nd pointer to char array --> "2nd string"
                         |_s[2]_|--> 3rd pointer to char array --> "3rd string"

                          ___                                __
char *s[][] ;// |s| ---> |___|--> 1st pointer to pointer -->|__|-->"1st string"                                                                  
                                                            |__|-->"2nd string"                                                                           
                         ____                                __            
                         |___|--> 2nd pointer to pointer -->|__|-->"1st string"                                                                  
                                                            |__|-->"2nd string"
                         ____                                __             
                         |___|--> 3rd pointer to pointer -->|__|-->"1st string"                                                                  
                                                            |__|-->"2nd string"
于 2012-11-12T05:41:48.690 に答える
0
char *s[][2] = { {"foo", "bar"}, {"baz", "spam"}, {"eggs", "ham"} };


cout<<s[1][0];

印刷しますbaz

于 2012-11-12T05:39:33.620 に答える