1

私は配列(Cベース言語)を持っていchar eItem[32]ます.

「i」ごとに、次の値がロードされます。

{ WADMIN, WADMIN, WADMIN, WADMIN, PALA, PALA, PALA, PALA }

今、私はこのコードを書いて、各値から最初と最後の要素を削除しました。

for ( i = 0; i <= 7; i++ ) {
    // code to get values
    k = strlen( eItem );
    eItem[k - 1] = "";
    eitem[0] = "";
    printf( eItem );
}

非常に単純ですが、機能しません。どうして?

4

3 に答える 3

0

マリアン、

以下の目的の実施を行ってください。それは合理的に機能するはずです。

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

int main()
{
  const char *src_strings[]={"WADMIN", "WADMIN", "WADMIN", "WADMIN", "PALA", "PALA", "PALA", "PALA"}; //source array of char pointers
  char *dest_strings[8]; //Destination array of character pointers
  int string_count,length,cindex;

  printf("Modified Strings\n");
  printf("================\n");

  //Traverse through the strings in the source array
  for(string_count=0;string_count<8; string_count++) 
  {
    //Compute the lenght and dynamically allocate the
    //required bytes for the destination array
    length=strlen(src_strings[string_count]);
    dest_strings[string_count]= (char*)malloc(sizeof(length-1));

    //Copy characters to destination array except first and last
    for(cindex=1; cindex<length-1; cindex++)
    {
       *(dest_strings[string_count]+cindex-1)=*(src_strings[string_count]+cindex);
    }

    //Append null character
    *(dest_strings[string_count]+cindex)='\0';
    printf("%s\n",dest_strings[string_count]);

    //Free memory as it is not needed
    free(dest_strings[string_count]);

  }
  return 0;
}

サンプル出力

Modified Strings
================
ADMI
ADMI
ADMI
ADMI
AL
AL
AL
AL
于 2012-10-09T01:42:32.170 に答える
0

文字列 (文字) の 1 つの要素に文字列を割り当てています。代わりに、一重引用符を使用して文字を割り当てる必要があります。たとえば、単語の前と最後にスペースを入れるには、これがあなたがやろうとしているようです:

eItem[k-1]=' ';
eItem[0]=' ';

ただし、文字列の 2 番目の文字を指す別の文字ポインターを作成することで文字列の先頭を実際に切り捨て、最後に NULL バイトを追加することで切り捨てることができます。

eItem[k-1]='\0';
char * truncated_eItem = eItem + 1;

メモリ内の下流+1のアドレスを指すことを覚えておいてください。1 * sizeof(char)

于 2012-10-08T22:51:49.733 に答える
0
eItem = eItem+1;
eItem[strlen(eItem)-1] = 0;
于 2012-10-08T22:54:27.357 に答える