[英]Print array with pointer in C
我有一個指向char
數組的指針,我需要打印整個數組(不是一個接一個,而是整個數組)。 我有錯誤: zsh: segmentation fault
。 我不明白為什么。 我的代碼從stdin
獲取文本並將字符放入數組中。 如果第一個數組char_array
不夠大,我會將它們放在名為bigger_array
的第二個bigger_array
。
int main() {
int c;
int index = 0;
size_t size = 100;
char *char_array = malloc(size * sizeof(char));
if (char_array != 0) {
while ((c = getchar()) != EOF && index < size) {
char_array[index] = c;
index++;
}
size_t newSize = size * 100;
char *bigger_array = realloc(char_array, newSize * sizeof(char));
if (bigger_array != 0) {
bigger_array = char_array;
while ((c = getchar()) != EOF && index < newSize) {
bigger_array[index] = c;
index++;
}
size = newSize;
}
}
printf(*char_array);
return 0;
}
bigger_array = char_array;
應該是char_array = bigger_array;
. 否則,指向新分配緩沖區的指針將被覆蓋到指向舊緩沖區的指針,並且會發生不好的事情。printf(*char_array);
不好,因為它在需要指針的地方傳遞一個整數(一個字符)。 它應該是printf("%.*s", index, char_array);
. 請注意,指定了要打印的長度,因此您無需添加終止空字符。您的代碼中有多個問題:
<stdio.h>
和<stdlib.h>
char_array
並將big_array
存儲到char_array
以便char_array
指向更大的分配數組。printf(*char_array)
由於多種原因具有未定義的行為。 您可以使用fwrite(char_array, 1, index, stdout)
或printf("%.*s\\n", (int)index, char_array)
。這是一個修改后的版本:
#include <stdio.h>
#include <stdlib.h>
int main() {
int c;
size_t index = 0;
size_t size = 100;
char *char_array = malloc(size);
if (char_array != NULL) {
while ((c = getchar()) != EOF) {
if (index == size) {
size_t new_size = size + size / 2 + size / 8; /* increase by the golden ratio */
char *new_array = realloc(char_array, new_size);
if (new_array == NULL) {
fprintf(stderr, "out of memory\n");
free(char_array);
return 1;
}
size = new_size;
char_array = new_array;
}
char_array[index++] = c;
}
printf("%.*s\n", (int)index, char_array);
}
return 0;
}
將此視為評論^^
我建議你使用標志來警告你的編譯器。 例如gcc
標志-W -Wextra -Wshadow
很好用,可以防止浪費時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.