簡體   English   中英

如何對字符字符串/數組使用malloc()函數?

[英]How to use the malloc() function for char string/array?

我正在編寫一個讀取字符列表的代碼(使用重定向),但是我存儲字符的字符串的大小為41。字符數與數組的大小不符,因此我需要使用malloc()以獲得確切的數組大小。 當我不使用malloc函數而打印數組時,將連同字符串一起打印符號和其他亂碼。 我需要malloc該字符串,以便不包括符號和亂碼。

碼:

#include <stdio.h>
#include <stdlib.h>

int main() {

    char c;
    char r1[41];
    int a = 0;

    while(scanf("%c", &c) != EOF) {
        if(c >= 'A' && c <= 'Z' || c == '[' || c == '.' || c == '!') {
        r1[a] = c;
        a++;
        }
    }

    printf("\nThe string is: %s\n", r1);

return 0;
}

輸出:

The string is TR[!.DFQ▒ ▒ ▒ 這

這里有兩個混淆點。

  1. 您的代碼顯示亂碼的原因不是固定長度還是可變長度。 切換到malloc()無法解決該問題。 確保字符串末尾有一個空終止符( '\\0' ):

     while(scanf("%c", &c) != EOF) { ... } r1[a] = '\\0'; 
  2. 您的原始代碼混合了數組和指針語法。 對於單個字符串,應使用char[]char*但不能同時使用。

    對於固定大小的字符串,將其聲明為:

     char string[40+1]; 

    對於可變長度的字符串,請執行以下操作:

     char *string = malloc(length + 1); if (string == NULL) { fprintf(stderr, "malloc failed\\n"); exit(EXIT_FAILURE); } // memory allocation successful 
char *string[40+1];

這將string定義為41個char指針的數組。 如果您希望它包含一個字符串,則需要將其定義為:

char string[40+1];

如果您知道(在運行時,但是在編譯時)字符串的長度,則可以使用malloc ,但是您需要將結果分配給char*類型的單個指針:

char *s = malloc(len + 1);
if (s == NULL) {
    /* malloc failed, handle the error */
}

這導致s指向char數組的第一個(0th)元素。 該數組尚未初始化,因此您需要將一些數據復制到其中。

完成此操作后,並假設內容正確地以null結尾, 可以使用以下命令打印字符串的值:

printf("The string is: \"%s\"\n", string);

comp.lang.c FAQ是此類事情的絕佳資源。

暫無
暫無

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

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