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

标签 c

如何从该数组中的每个字符串中删除“\n”?

我知道我可以对一个简单的 C 字符串执行类似的操作,但在本例中我未能使用它

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]);
    }   
}

最佳答案

用手做就可以了,很简单!

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

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' 和 0 是等效的,即 if ('\0' == 0) { ... } 计算为真。

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

关于c - 从二维数组中的字符串中删除最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10733933/

相关文章:

c - OpenMP 段错误

c++ - 现在的 C 和 C++ 编译器的线程保证是什么?

c - 如何将 CvMat 从类型 CV_AA 转换为 CV_32F

c - 这些 C 函数参数类型有什么区别?

c - 对 'xcb_event_get_label' 的 undefined reference

c - 当 630 反转 36 时打印。为什么不显示0?

c - 从文件读取 getc 后,C 中出现奇怪的字符串

c - 使用信号量系统 V 的 Scanf 和 printf

C - 套接字编程客户端服务器 - 主机名连接

c++ - llvm::CloneBasicBlock 示例