首页 > 解决方案 > 如何修复“[something] may be used uninitialized in this function”警告?

问题描述

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

当我初始化或它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]!='\0'; i++)
    dest[i]=src[i];
}

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

输入的文字:你好世界

输出:

你好

标签: cgcc-warning

解决方案


解决编译器警告需要做一些事情:

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

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

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


推荐阅读