[英]Problems while dynamically allocating memory for a read input function
我在處理一個應該從用戶那里讀取字符串的函數時遇到了問題。 我總是得到(null)
作為輸出。
對於這種問題,這甚至是“正確”的方法嗎?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getString(char *input);
int main(void)
{
char *arr = NULL;
printf("please enter string: ");
getString(arr);
printf("%s", arr);
return 0;
}
int getString(char *input)
{
int i;
char c;
char *tmp;
input = malloc(sizeof(char));
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) {
tmp = realloc(input, (i + 2) * sizeof(char));
if (tmp == NULL) {
free(input);
printf("allocation error");
return -1;
}
input = tmp;
input[i] = c;
}
input[i] = '\0';
return 0;
}
如果你想動態分配字符串,你需要傳遞一個指向char*
的指針,而不僅僅是一個char *
。 這樣,函數就可以修改真正的char *
指針,調用者會看到結果。 在您當前的代碼中, input
變量僅存在於函數內部,不會影響調用者使用的變量,因此您的arr
保持不變( NULL
)。
像這樣的東西:
int getString(char **input)
{
int i;
char c;
char *tmp, *cur = NULL;
// No initial malloc() needed here.
// Let realloc() do the job passing NULL the first time.
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) {
tmp = realloc(cur, (i + 2) * sizeof(char));
if (tmp == NULL) {
free(cur);
printf("allocation error");
return -1;
}
cur = tmp;
cur[i] = c;
}
cur[i] = '\0';
*input = cur;
return 0;
}
然后像這樣傳遞參數:
getString(&arr);
您應該返回input
指針,因為它是您的函數的本地指針,並且在程序離開函數時被釋放,因此在main
中arr
仍然是NULL
。
int* getString(char *input);
int main(void)
{
//...
arr = getString(arr);
//...
}
int* getString(char *input)
{
//...
return input;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.