【发布时间】:2021-11-01 08:37:16
【问题描述】:
我正在尝试编写一个函数来打印字符串的子字符串,但是在打印它时,只打印数组中的第一个字符。
正如您在代码中看到的那样,在创建子字符串并正确显示后,我在函数中添加了 printf 语句。然而,当函数被传递到主函数中的printf 函数时,它只打印第一个字符。
感谢人们能够提供的任何帮助。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
char *ft_substr (const char *s, unsigned int start, size_t len)
{
char *str;
unsigned int i;
unsigned int j;
str = malloc(len * sizeof(char) + 1);
i = start;
j = 0;
while (i < len + start)
{
str[j] = s[i];
j++;
i++;
}
str[j + 1] = '\0';
printf("%s\n", str);
free(str);
return (str);
}
int main (void)
{
char hello[] = "Hello World";
char sub = *ft_substr(hello, 1, 4);
printf("%s\n", &sub);
return (0);
}
【问题讨论】:
-
free(str); return (str);返回释放的内存不会有好的结果。删除free并将其留给调用者执行此操作。 -
char sub;应该是char *sub;和printf("%s\n", &sub);应该是printf("%s\n", sub);即char *sub = ft_substr(hello, 1, 4); printf("%s\n", sub); -
感谢有关释放内存的建议。
-
我尝试将 * 添加到 sub 但我收到错误警告:incompatible integer to pointer conversion initializing 'char *' with an expression of type 'char'; remove * [-Wint-conversion] char *sub = *ft_substr(hello, 1, 4);
标签: c substring dynamic-memory-allocation c-strings function-definition