如何修复“[something] 可能在此函数中未初始化使用”警告?

How to fix the "[something] may be used uninitialized in this function" warning?

我正在尝试制作字符串复制命令,但在编译程序时收到编译警告(见标题)。如果我在没有 -Wall 选项的情况下编译代码,它会给我正确的输出,但我想用 -Wall 编译它并且不会收到任何警告。我该如何解决我的问题?我已经在谷歌上搜索过了,但我不明白。

当我将 str2 初始化为 NULL0 时,出现段错误。

#include<stdio.h>
#include<stdlib.h>

void my_strcpy(char *dest[], const char *src[]);

int main(){

  char *str1, *str2;
  int i;

  printf("What is the longest length of a string that you will enter?");
  scanf("%i",&i);

  str1=malloc(i * sizeof(char));
  if (str1 == NULL){
    printf("\n malloc failed to allocate enough memory!\n");
    return 1;
  }

  printf("Enter a string: ");
  scanf("%s", str1);

  my_strcpy(str2,str1);
  printf("%s \n", str1);
  return 0;
}

void my_strcpy(char *dest, const char *src)
{
  int i;

  for(i=0; src[i]!='[=10=]'; i++)
    dest[i]=src[i];
}

我希望输出只显示一个字符串,例如:

text entered: hello world

输出:

hello

解决编译器警告需要做的事情很少:

  1. my_strcpy 的函数原型。考虑将原型类型与实现相匹配:void my_strcpy(char *dest, const char *src);,而不是 void my_strcpy(char *dest[], const char *src[]);

  2. str2 的分配。它被声明为一个指针,但没有对 space 进行赋值。考虑添加 str2 = malloc(i+1); 或类似的。

  3. str1 的分配(运行 时间错误,不是编译器警告)。请记住为终端 NUL 字节添加 space:str1=malloc((i+1) * sizeof(char)); 而不是 str1=malloc(i * sizeof(char));