我正在 Unix 中编写 C 程序,但无法弄清楚如何将数组元素设置为 NULL。我需要能够这样做以从字符串中删除多个字符。
问问题
66657 次
3 回答
7
您不能分配null
给特定的 char 数组索引,因为该索引表示的值是 char 而不是指针。但是如果您需要从给定字符串中删除特定字符,您可以按如下方式实现
void removeChar(char *str, char garbage) {
char *src, *dst;
for (src = dst = str; *src != '\0'; src++) {
*dst = *src;
if (*dst != garbage) dst++;
}
*dst = '\0';
}
测试程序
#include<stdio.h>
int main(void) {
char* str = malloc(strlen("abcdef")+1);
strcpy(str, "abcdbbbef");
removeChar(str, 'b');
printf("%s", str);
free(str);
return 0;
}
输出
acdef
于 2012-09-21T17:33:10.393 回答
2
如果您有char[]
,您可以使用以下方法将单个元素归零:
char arr[10] = "foo";
arr[1] = '\0';
请注意,这与 assigning 不同NULL
,因为arr[1]
它是 achar
而不是指针,因此您不能NULL
对其进行分配。
也就是说,这可能不会像你想象的那样做。上面的示例将生成 string f
,而不是fo
您似乎期望的那样。
如果要从字符串中删除字符,则必须使用memmove
和一些指针算法将字符串的内容向左移动(包括空终止符):
例子:
#include <stdio.h>
#include <string.h>
int removechars(char *str, size_t pos, size_t cnt) {
size_t len = strlen(str);
if (pos + cnt > len)
return -1;
memmove(str + pos, str + pos + cnt, len - pos - cnt + 1);
return 0;
}
然后像这样使用它:
char str[12] = "hello world";
if (removechars(str, 5, 4) == 0) /* remove 4 chars starting at str[5] */
printf("%s\n", str); /* hellold */
于 2012-09-21T18:56:19.053 回答
0
如果你在谈论一个指针数组(比如char **
),你只会说array[element] = NULL;
. 但听起来好像你真的只想截断一个字符串 ( char *
),在这种情况下你实际上想要写string[index] = '\0'
,\0
空字节在哪里。但是,据我所知,0
、'\0'
和NULL
都等价且等于 0(如果我错了,请纠正我)。当然,为了清楚起见,您应该使用0
数字、'\0'
字符和字符串以及NULL
指针。
于 2012-09-21T17:49:58.107 回答