[英]How to replace a character in a string with NULL in ANSI C?
我想替換ANSI C中字符串中的所有'a'字符。這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
void sos(char *dst){
while(*dst){
if(*dst == 'a')
*dst = '\0';
dst++;
}
}
int main(void){
char str[20] = "pasternak";
sos(str);
printf("str2 = %s \n", str);
return 0;
}
當我運行它時,結果是:
str2 = p
但這應該是
str2 = psternk
它可以與其他字符(例如'b'等)配合使用。我試圖將NULL分配給* dst,但是在編譯過程中出現錯誤。
我現在如何刪除“ a”字符?
在C語言中,字符串以零結尾 ,這意味着當字符串中有'\\0'
時,它就是字符串的結尾 。
因此,您要做的就是將字符串分成3個不同的字符串:
p
stern
k
如果要刪除a
,則必須將所有字符移動到a
位置之后。
printf的作用是:讀取字節,直到找到'\\0'
。
您"pasternak"
轉換為"p\\0astern\\0k"
,因此printf打印p
。
此約定在stdlib的字符串函數上使用,因此您不必傳遞字符串長度作為參數。
這就是為什么在C字符串中以null終止的原因:這只是C stdlib遵循的約定。
正如您所發現的,缺點是字符串不能包含\\0
。
如果您確實要打印給定的字節數,請使用fwrite
東西,它計算要打印的字節數,因此可以打印\\0
。
先前提供的答案非常適合解釋您的代碼為什么不起作用。 但是您可以嘗試使用strtok根據'a'字符分割字符串,然后將各個部分連接在一起,或者只是簡單地打印它們。 檢查以下示例: http : //www.tutorialspoint.com/c_standard_library/c_function_strtok.htm
'\\0'
是C語言工具識別字符串結尾的方式。 為了實際刪除字符,您需要將所有后續字符向前移。
void sos(char *dst) {
int offset = 0;
do {
while (dst[offset] == 'a') ++offset;
*dst = dst[offset];
} while (*dst++);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.