如何修复“[something] 可能在此函数中未初始化使用”警告?
How to fix the "[something] may be used uninitialized in this function" warning?
我正在尝试制作字符串复制命令,但在编译程序时收到编译警告(见标题)。如果我在没有 -Wall
选项的情况下编译代码,它会给我正确的输出,但我想用 -Wall
编译它并且不会收到任何警告。我该如何解决我的问题?我已经在谷歌上搜索过了,但我不明白。
当我将 str2
初始化为 NULL
或 0
时,出现段错误。
#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
解决编译器警告需要做的事情很少:
my_strcpy 的函数原型。考虑将原型类型与实现相匹配:void my_strcpy(char *dest, const char *src);
,而不是 void my_strcpy(char *dest[], const char *src[]);
str2 的分配。它被声明为一个指针,但没有对 space 进行赋值。考虑添加 str2 = malloc(i+1);
或类似的。
str1 的分配(运行 时间错误,不是编译器警告)。请记住为终端 NUL 字节添加 space:str1=malloc((i+1) * sizeof(char));
而不是 str1=malloc(i * sizeof(char));
我正在尝试制作字符串复制命令,但在编译程序时收到编译警告(见标题)。如果我在没有 -Wall
选项的情况下编译代码,它会给我正确的输出,但我想用 -Wall
编译它并且不会收到任何警告。我该如何解决我的问题?我已经在谷歌上搜索过了,但我不明白。
当我将 str2
初始化为 NULL
或 0
时,出现段错误。
#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
解决编译器警告需要做的事情很少:
my_strcpy 的函数原型。考虑将原型类型与实现相匹配:
void my_strcpy(char *dest, const char *src);
,而不是void my_strcpy(char *dest[], const char *src[]);
str2 的分配。它被声明为一个指针,但没有对 space 进行赋值。考虑添加
str2 = malloc(i+1);
或类似的。str1 的分配(运行 时间错误,不是编译器警告)。请记住为终端 NUL 字节添加 space:
str1=malloc((i+1) * sizeof(char));
而不是str1=malloc(i * sizeof(char));