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

您正在将字符串分配给字符串(字符)的单个元素。相反,您需要使用单引号指定一个字符。例如,在单词的前面和末尾放置一个空格,这似乎是您想要做的:

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

但是您实际上可以通过使单独的字符指针指向字符串中的第二个字符来截断字符串的开头,并通过添加 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 回答