1

LL,4014.84954この例のような関数に送信するchar配列があります。

#include <stdio.h>
#include <math.h>

void myFunction(char* in_string, char* out_string) {
  printf("Start_String=%s\n", in_string);
  int in_size = (int)(sizeof(in_string));
  printf("%d\n", in_size);
  int i = 0;
  for(i = 0; i <= in_size-ceil(in_size/2); i++) {
    out_string[i] = in_string[i];
  }
}

int main(int arg) {
  char in_string[] = "LL,4014.84954";
  char out_string[] = "";
  printf("In_String=%s\n", in_string);
  myFunction(in_string, out_string);
  printf("Out_String=%s\n", out_string);
}

私の質問は2つの部分に分かれています。

  1. このchar配列の長さを取得するにはどうすればよいですか?int in_size = (int)(sizeof(in_string));この例では、ポインターのサイズ(long int)である8が得られます。ヌル終了が表示されるまで進行するforループを作成できることはわかっていますが、もっと良い方法はありますか?以前はchar[]を使用していてsizeofうまく機能していましたが、現在はchar*に変換しています。

  2. これらの文字の一部をに書き込むにはどうすればよいですかout_string。私の例では、現在すべての文字をに書き込みますout_string

生の出力は次のとおりです。

In_String=LL,4014.84954
Start_String=LL,4014.84954
8
Out_String=LL,40014.84954
4

2 に答える 2

1

最初の質問については、を使用してくださいstrlen()

2番目の質問に関しては、まずout_string、結果を収容するのに十分な幅があることを確認する必要があります。現在、そうではなく、コードの動作は未定義です。これを修正したら、文字列の一部をコピーするにはfor、NULターミネータを忘れずに、ループの初期条件と最終条件を変更する必要があります。

于 2013-03-23T19:18:28.450 に答える
1

(1) 質問2への回答:

char out_string[] = "";

out_string[]サイズは1つだけです。の割り当て が間違っているため、未定義のエラーが発生しますout_string[i] = ...i > 0これの代わりに、次のout_string[]よう に宣言する必要があります。

out_string[] = malloc(strlen(in_string) + 1);

//                                        ^ extra for \0 char

(2) さらに@WhozCraigのコメントが正しいので、実際にstrlen()は文字列の長さを見つける必要があります。sizeofあなたは間違って使用しています。

したがって、置き換えます:

int in_size = (int)(sizeof(in_string));

int in_size = strlen(in_string);

(3) また、とは何ですかin_size-ceil。生の出力から理解できるように、そのような種類の関数や計算は必要ありません。forループを置き換えるだけです。

for(i = 0; i <= in_size-ceil(in_size/2); i++) 

for(i = 0; i < in_size; i++) 

(4) 最後に、終了することを忘れないでください。forstring out_stringループの後にこの行を追加してください

out_string[i] = '\0'
于 2013-03-23T19:44:20.603 に答える