C 如何修剪字符[]格式的字符串?

C 如何修剪字符[]格式的字符串?,c,C,在我的C程序中,我创建了一个字符数组,如char read_str[MAX_ALLOWED_BUFFER]。 使用这个数组,我如何从它的左侧和右侧修剪空格和换行符。 这不是指针,所以我不知道如何去掉尾随字符。 有人能帮忙吗 char read_str[MAX_ALLOWED_BUFFER]; FILE *fp; fp = fopen(argv[1],"r"); fgets(read_str, MAX_BUFFER, fp); // how to trim read_str ? 您需要标识第一个

在我的C程序中,我创建了一个字符数组,如
char read_str[MAX_ALLOWED_BUFFER]。
使用这个数组,我如何从它的左侧和右侧修剪空格和换行符。
这不是指针,所以我不知道如何去掉尾随字符。
有人能帮忙吗

char read_str[MAX_ALLOWED_BUFFER];
FILE *fp;
fp = fopen(argv[1],"r");
fgets(read_str, MAX_BUFFER, fp);
// how to trim read_str ?

您需要标识第一个非空白字符,然后将值从那里复制到数组的开头。然后需要标识最后一个非空白字符,并在其后面创建一个新的空终止符字符

请注意,实际上并不是删除或删除任何内容,只是更改数组中字符的值


您可能会发现C标准库中的一些字符串处理函数很有用;下面是它们的列表:。

要从结尾处修剪空白,只需在适当的位置写一个0。字符串处理函数将其解释为字符串的结尾。要从开头删除空白,最简单的方法是使用指向数组的指针,并让该指针指向第一个非空白字符。但是您也可以将字符移动到数组的开头,例如使用
memmove

一种方法是分配第二个字符串,并将第一个字符串处理为第二个字符串

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

#define MAX_ALLOWED_BUFFER 100

char read_str[MAX_ALLOWED_BUFFER] = "    a core string     ";
char result[MAX_ALLOWED_BUFFER];

int main(void) {
  char *t;

  read_str[MAX_ALLOWED_BUFFER - 1] = '\0'; // not needed here but wise in general
  // trim trailing space
  for(t = read_str + strlen(read_str); --t >= read_str; )
    if (*t == ' ')
      *t = '\0';
    else
      break;
  // trim leading space
  for(t = read_str; t < read_str + MAX_ALLOWED_BUFFER; ++t)
    if(*t != ' ')
      break;
  strcpy(result, t);
  printf("got <%s>\n", result);
  return 0;
}
#包括
#包括
#定义最大允许缓冲区100
char read_str[MAX_ALLOWED_BUFFER]=“一个核心字符串”;
字符结果[允许的最大缓冲区];
内部主(空){
char*t;
read_str[MAX_ALLOWED_BUFFER-1]='\0';//此处不需要,但通常是明智的
//修剪尾部空间
对于(t=read\u str+strlen(read\u str);--t>=read\u str;)
如果(*t=='')
*t='\0';
其他的
打破
//修剪前导空间
对于(t=read_str;t
char[]类型的指针是如何工作的?如果我得到一个char[],如何从中得到一个指针,然后使用类似pt++的东西更改指针的值,然后将指针重新分配给char[]变量?我在这里有点困惑。。。(我还修改了我的第一篇帖子)我的意思是使用
char*
,类似于
char*str\u ptr=&read\u str[k],然后传递
str\u ptr
,而不是
read\u str
。那你就不需要动了。如果这不是一件好事,不管出于什么原因,那么你必须移动
char
s。我仍然不明白,k应该是什么?
k
是第一个非空白字符的索引,您感兴趣的字符串部分的起始位置。请参见:要获取指向数组read\u str的指针很容易:
char*p=read\u str