簡體   English   中英

如何在ANSI C中用NULL替換字符串中的字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM