我正在Unix中編寫一個C程序,但無法弄清楚如何將數組元素設置爲NULL。我需要能夠做到這一點從字符串中刪除多個字符。如何在C程序中將數組中的元素設置爲null
1
A
回答
6
您不能將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
0
如果你在談論一個數組的指針(說char **
),你只能說array[element] = NULL;
。但它聽起來好像你真的想截斷一個字符串(char *
),在這種情況下,你實際上想寫string[index] = '\0'
,其中\0
是空字節。但據我所知,0
,'\0'
和NULL
都等於0(請糾正我,如果我錯了)。當然,爲了清楚起見,您應該使用0
作爲數字,'\0'
作爲字符和字符串,而NULL
作爲指針。
+0
'NULL'通常是'(void *)0',那麼會引發一個「賦值使指針無法投射的指針」的提示。而在少數平臺上,NULL指針不是全零位,它可能會產生錯誤的結果。 –
2
如果你有char[]
,您可以使用這種零出各個元素:
char arr[10] = "foo";
arr[1] = '\0';
注意,這是不一樣的分配NULL
,因爲arr[1]
是char
,而不是一個指針,不能將NULL
分配給它。
這就是說,這可能不會做你認爲它會。上面的例子會產生字符串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 */
相關問題
- 1. 將數組中的元素設置爲0或NULL
- 2. c:將malloc'd數組元素設置爲NULL(無效寫入)
- 3. C++在Struct中設置元素Array = NULL
- 4. 在java中刪除數組中的元素,你可以將它設置爲null?
- 5. 將NULL值明確設置爲數組元素
- 6. 在VBscript中,如何將數組元素設置爲動態數組?
- 7. C++:數組元素設置爲0
- 8. 如何在C中將字符數組重置爲0/NULL?
- 9. 如何在C++中將指向int數組的指針設置爲NULL?
- 10. 通過將元素設置爲null來釋放數組中的空格?
- 11. 將變量設置爲數組元素
- 12. 在C++中將指針數組的所有元素設置爲nullptr
- 13. 如何在C編程中重新排序數組元素
- 14. 如何在elisp中設置多維數組中的元素
- 15. 如何將元素的數量在C++中的整數數組?
- 16. 如何在datagrip中將單元格設置爲null?
- 17. 如何在Ruby中設置固定數量的數組元素
- 18. 如何在C中將結構指針設置爲NULL?
- 19. 如何在TOS中的組件tWriteJSONField中設置循環元素/組元素
- 20. 如何將數組元素轉換爲PHP中的simplae元素?
- 21. 如何將元素插入數組如果不爲null
- 22. 如何在JLabel數組中設置元素的文本?
- 23. 如何在IDA Pro中設置數組元素的大小?
- 24. Tensorflow,設置序列的數組元素
- 25. C++設置一個類中的數組元素的數量
- 26. 元素在rails中爲null?
- 27. C++:如何將數組元素推入數組列表中?
- 28. 如何在PostgreSQL中將NULL值設置爲數字?
- 29. C++重置數組爲null
- 30. common lisp如何在2d數組中設置元素?
顯示一些代碼。你試過什麼了? –
你的意思是你想通過在某個位置添加NULL字符來縮短字符串嗎? 只需爲其分配'\ 0'即可。 – Luke
空字節是一個字符串*終止符* - 如果要刪除字符,則需要將下列字符左移,而不是用空覆蓋「壞」字符。 – DCoder