[英]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▒ ▒ ▒ 這
這里有兩個混淆點。
您的代碼顯示亂碼的原因不是固定長度還是可變長度。 切換到malloc()無法解決該問題。 確保字符串末尾有一個空終止符( '\\0'
):
while(scanf("%c", &c) != EOF) { ... } r1[a] = '\\0';
您的原始代碼混合了數組和指針語法。 對於單個字符串,應使用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.