我在应该从用户读取字符串的函数中遇到麻烦。我总是得到(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;
}
由于input
是函数的局部变量,因此您也应该返回指针,因此在main
中,arr
仍为NULL
。
如果要动态分配字符串,则需要传递一个[char*
的指针],而不仅仅是char *
。这样,函数可以修改实际的char *
指针,调用者将看到结果。类似这样的东西:
int getString(char **input)
{
int i;
char c;
char *tmp, *cur = NULL;
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;
}