从二维数组中的字符串中删除最后一个字符

时间:2012-05-24 08:38:30

标签: c

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

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

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

我也不确定这是不是道具方式。

String中间不会包含任何空格或\ 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 个答案:

答案 0 :(得分: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) { ... }的计算结果为真。

Sidenote 2 :我使用elem_number,因为我不知道元素的数量是参数还是事先硬编码/知道。用适当的替代品替代。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

    for(i = 0; i< sizeof(cmd)/sizeof(unsigned char[6]);i++)
        *strchr(cmd[i], '\n') = '\0';