gpt4 book ai didi

c - 指针函数返回假值

转载 作者:行者123 更新时间:2023-11-30 21:15:17 24 4
gpt4 key购买 nike

我写了一个这样的函数,当参数 x 为偶数时,它无法按预期工作,例如,如果我在中键入 printf("%s",maxCharac(2)) main 它将打印 aa 和它旁边的一个额外字符,但如果是奇数,它可以正常工作。

char *maxCharac(int x)
{
char *str=(char*)malloc(sizeof(char)*x);
for(int i=0;i<x;i++)
{
str[i]='a';
}
return str;
}

最佳答案

C 字符串为 NUL终止,所以

char *maxCharac(int x)
{
char *str = malloc(x + 1);

if (str != NULL)
{
for (int i = 0; i < x; i++)
{
str[i] = 'a';
}
str[i] = '\0';
}

return str;
}

如您所见:

  1. 必须为空终止符留出空间 '\0' malloc(x + 1);
  2. sizeof(char) 根据标准始终为 1
  3. 使用前必须检查malloc&co返回值!= NULL

或者,为了避免最后一条指令,您可以使用 calloc将分配的内存归零

char *maxCharac(int x)
{
char *str = calloc(x + 1, 1);

if (str != NULL)
{
for (int i = 0; i < x; i++)
{
str[i] = 'a';
}
}

return str;
}

最后一件事,根据函数,调用者必须检查函数的返回值以确保不使用可能返回的 NULL 指针:

int main(void)
{
char *str = maxCharac(2);

if (str != NULL)
{
printf("Test: %s\n", str);
}
}

关于c - 指针函数返回假值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43325632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com