C删除第一个和最后一个元素
我有一个基于C语言的数组,char-eItem[32] 对于每个i,将加载这些值: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
{ 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