簡體   English   中英

在 C 中將 char 轉換為 char*

[英]cast a char into a char* in C

我有一個字符數組s[11]="0123456789"; 並且我希望能夠獲取每個數字s[i] (使用 for 循環)並以某種方式將其轉換為char* (我需要一個 char*,特別是因為我需要在其他字符串上使用 strncat)

在過去的 4 個小時里,我一直在嘗試這樣做,但我什么也做不了。

除非您願意暫時修改s ,或將角色復制到其他地方……否則您會遇到困難。

暫時修改s

int main() {
  char s[11] = "0123456789";
  for (int i = 0; i < strlen(s); i++) {
    // Modify s in place.
    const char tmp = s[i+1];
    s[i+1] = '\0';
    char *substr = &s[i];
    // Do something with substr.
    printf("%s\n", substr);
    // Fix s
    s[i+1] = tmp;
  }
}

或者將s[i]復制到一個新字符串。

int main() {
  char s[11] = "0123456789";
  for (int i = 0; i < strlen(s); i++) {
    // Create a temporary string
    char substr[2];
    substr[0] = s[i];
    substr[1] = '\0';
    // Do something with substr.
    printf("%s\n", substr);
  }
}

或者也許只是不使用strncat?

假設您實際上正在使用strncat或類似的...這些功能非常簡單,尤其是當您僅附加一個字符時。 您可能只是創建自己的版本。

void append_character(char *buffer, int buffer_size, char new_character) {
  int length = strlen(buffer);
  if (length + 2 < buffer_size) {
    buffer[length] = new_character;
    buffer[length+1]  = '\0';
  } else {
    // No space for an additional character, drop it like strncat would.
  }
}

或者你可以將它作為一個簡單的 strncat 包裝器來完成:

void append_character(char *buffer, int buffer_size, char new_character) {
  char new_string[2] = { new_character, '\0' };
  strncat(buffer, buffer_size, new_string);
}

你的要求沒有任何意義。 一個字符是一個小數字。 指針是某個內存的地址。 將字符轉換為指針不會給你一個有效的指針,而是一個一旦使用就會崩潰的指針。

對於 strncat,您需要一個包含 C 字符串的字符數組。 您可以通過編寫 char array[2] 來創建一個字符串; (現在你有一個包含兩個字符空間的數組),然后 array[0] = whatchar; 數組[1] = 0; 現在你有一個 C 字符串,其中有一個字符和一個尾隨零字節的空間。

還有一個想法:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char src[11]="0123456789";
    char dest[50]="abc";

    char* p = src;
    int i = 0;
    int len = strlen(src);
    
    for (i = 0; i < len; i++)
    {
        strncat(dest,p,1);
        p++;
    }
    
    printf("src:  %s\n", src);
    printf("dest: %s\n", dest);

    return 0;
}

在Ubuntu下用gcc編譯:

$ gcc hello_str.c -o hello_str

輸出:

$ ./hello_str 
src:  0123456789
dest: abc0123456789

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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