c - 如何修复“[something] may be used uninitialized in this function”警告?
问题描述
我正在尝试制作字符串复制命令,但在编译程序时我收到了编译警告(见标题)。如果我在没有-Wall
选项的情况下编译代码,它会给我正确的输出,但我想编译它-Wall
并且不会收到任何警告。如何解决我的问题?我已经google了,但我不明白。
当我初始化或它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]!='\0'; i++)
dest[i]=src[i];
}
我希望输出只显示一个字符串,例如:
输入的文字:你好世界
输出:
你好
解决方案
解决编译器警告需要做一些事情:
my_strcpy 的函数原型。考虑将原型与实现匹配:
void my_strcpy(char *dest, const char *src);
和 NOTvoid my_strcpy(char *dest[], const char *src[]);
str2 的分配。它被声明为指针,但没有对空间进行分配。考虑添加
str2 = malloc(i+1);
或类似。str1 的分配(运行时错误,而不是编译器警告)。请记住为终端 NUL 字节添加空间:
str1=malloc((i+1) * sizeof(char));
而不是str1=malloc(i * sizeof(char));
推荐阅读
- cakephp - 应该返回模型的 Cakephp 3.6 助手被强制转换为模板中的数组
- json - JSON解析异常
- python-3.x - obtain en-US title tag text
- excel - 如何在excel中将余额链接到其他表
- sql - 为什么我的 SQL Left Join 不起作用?
- sas - SAS:how to count average interval time
- python - 正则表达式 - 如何替换满足某些条件的引号之间的文本
- swift - Swift 你如何让字体大小适合自定义框架?
- android - Android 通知会立即触发,而不是在设定的日期和时间触发
- ruby - 匹配正则表达式中的确切短语和单词