2

如何从此数组中的每个字符串中删除 '\n'?

我知道我可以为一个简单的 C-String 做这样的事情,但在这种情况下我没有使用它

cmd[strcspn(cmd, "\n")] = '\0';

我也不确定这是否是正确的方式。

字符串不会在中间包含任何空格或 \n。它们也具有静态长度 (6)。

#include <stdlib.h>

unsigned char cmd[][6] = { 
    {"r123\n"},
    {"r999\n"},
    {"l092\n"},
    {"l420\n"}};

void main(void) {
    int i;

    for(i = 0; i < (sizeof(cmd) / sizeof(cmd[0])); i++) {
        printf("%s\n", cmd[i]);
    }   
}
4

4 回答 4

2

只需手动操作,很简单!

如果保证它只是每个单词中的最后一个字符,并且保证在那里,那么就像这样:

for (i = 0; i < elem_number; ++i){
    cmd[i][strlen(cmd[i])-1] = 0;
}

另一方面,如果您不确定最后会有多少个空白字符,但您知道它们只会在最后出现(在这种情况下可能是 0!)比这:

for (i = 0; i < elem_number; ++i){
    for (j = 0; cmd[i][j] != 0; ++j){
        if (isspace(cmd[i][j]))
             cmd[i][j] = 0;
     }
}

瞧!

如果中间有空格,那么您必须定义所需的行为:只剪掉尾随空格,将字符串剪成许多小空格,或者完全不同的东西。

哦,还有另一个旁注:其他人似乎都在使用char = '\0'. 在C,'\0' and 0中是等价的,即if ('\0' == 0) { ... }计算结果为真。

旁注2:我使用elem_number是因为我不知道元素的数量是参数还是硬编码/提前知道。用合适的代替。

于 2012-05-24T08:50:03.920 回答
1

将 char 数组中的字符设置为\0将截断该字符处的字符串。因此,在您的示例中,设置第 5 个字符将完成这项工作。

cmd[i][4] = '\0';

如果预期的字符串长度小于 4,则不要硬编码为 4,而是strlen(cmd[i])-1

于 2012-05-24T08:41:40.060 回答
0

也许你可以使用strrchr?如果字符串可能包含多个换行符,则在循环中使用。

于 2012-05-24T08:43:37.110 回答
-1
    for(i = 0; i< sizeof(cmd)/sizeof(unsigned char[6]);i++)
        *strchr(cmd[i], '\n') = '\0';
于 2012-05-24T08:57:09.613 回答