C删除第一个和最后一个元素

C删除第一个和最后一个元素,c,C,我有一个基于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

我有一个基于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 );
}

非常简单,但不起作用。为什么?

您将字符串分配给字符串的单个元素或字符。相反,您需要使用单引号指定一个字符。例如,在单词的前面和结尾加一个空格,这就是你似乎要做的:

eItem[k-1]=' ';
eItem[0]=' ';
但实际上,您可以通过使单独的字符指针指向字符串中的第二个字符,在开始处截断字符串,并通过添加空字节在结尾处截断:

eItem[k-1]='\0';
char * truncated_eItem = eItem + 1;
记住,+1表示它指向内存中下游的地址1*sizeofchar。

Marian

eItem = eItem+1;
eItem[strlen(eItem)-1] = 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;
}

你知道你正在给一个字符分配一个字符串,对吧?打开你的编译器警告。也许你想要char*而不是char?什么是WADMIN,PALA?它们是如何定义的?不会在循环中工作,因为每次迭代都会缩短字符串。您需要使用一个单独的字符指针:char*truncated_eItem=eItem+1。或者您可以只打印f eItem+1。您应该写一两句话来解释为什么这样做,而不是将代码作为答案转储。@1不知怎的,我假设eItem是char*[]类型的。。。PerricOxide已经问过作者了。我会看到答案的。@Sam。抱歉,假设正确答案是自我解释,我很激动。现在我很清楚这可能不是一个正确的答案下一次,我将首先尝试澄清这个问题。
Modified Strings
================
ADMI
ADMI
ADMI
ADMI
AL
AL
AL
AL