私はここでは少し新しく、ポインタ、ポインタへのポインタ、および文字列についていくつか理解したかっただけです。ここでは、私がこれまでに書きとめたものです:C関数ポインタへのポインタの返信
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Return a pointer to an array of two strings. The first is the characters
of string s that are at even indices and the second is the characters from
s that are at odd indices */
char **parity_strings(const char *s) {
int len = strlen(s);
char **lst = malloc(sizeof(char*)*2);
for(int i=0; i<2; i++){
lst[i] = malloc(sizeof(char)*(len/2));
}
for(int i=0; i<len; i++){
if(i%2==0){
(*lst)[0]=s[i];
}else{
(*lst)[1]=s[i];
}
}
return lst;
}
int main(int argc, char **argv) {
char **r = parity_strings(argv[1]);
printf("%s %s %s", r[0], r[1], argv[1]);
return 0;
}
だから私は動的に文字列の配列の両方のために必要なメモリ、および文字列そのものを割り当てたいです。ここで正しい考えがあるかどうかを知りたいのは、char*
の2つのポインタを指すタイプchar**
のポインタを返したい場合、そこから各char
の文字列にアクセスします。
出力が期待どおりではありません。私はCには比較的新しいので、まだ学んでいることがあります。
ありがとうございます、ありがとうございます。
'LST [I] = malloc関数(はsizeof(CHAR)*(LEN/2))のように書かなければならない;' 1)文字列の長さが奇数である場合、これはあまり配分しません。2)結果文字列の2つの '\ 0 '終端文字のためのスペースも必要です。 2a)結果の文字列をヌル終了する必要があります。3) '(* lst)[0] = s [i];'これは間違っています。あなたの意図は何ですか? – wildplasser
Cの文字列はヌルで終了する配列なので、それらのnullを処理するのを忘れたようです... –
@wildplasser私は '*(lst [0])= s [i]'に変更しました。私は最初の 'char'配列にアクセスしようとしています – user2965071