如何从此数组中的每个字符串中删除'\ 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]);
}
}
答案 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';