【发布时间】:2021-05-12 17:25:59
【问题描述】:
我正在尝试制作一个密码程序,并且在接近密码功能的最后步骤时遇到此错误(如果我没有更清楚,真的很抱歉,这是我第一次在这里提问/发布问题,关于我的臃肿代码)
代码如下:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
string ptoc(string ptext);
//Declaration of validated key as global so that Caesar(ptoc) function can access it
long int ckey;
int main(int argc, string argv[])
{
string *c;
string ctext;
string ptext;
if (argc != 2)
{
printf("Only enter the key\n");
return 1;
}
else if (argc == 2)
{
//Converting entered CL argument into integer
c = &argv[2];
long int key = strtol(argv[1], c, 10);
if (key == 0) //
{
printf("Enter a valid key, a positive integer\n");
return 1;
}
else // Assigning to another variable if valid
{
ckey = key;
}
printf("%ld\n", ckey);
}
ptext = get_string("Enter the plaintext: \n");
ctext = ptoc(ptext);
}
//Cipher function
string ptoc(string ptext)
{
string collect;
for (int i = 0, len = strlen(ptext); i < len; i++)
{
char c = ptext[i];
if (isalpha(c))
{
if (c == '.' || c == ',' || c == '!')
{
i++;
}
else if (isupper(c))
{
if (c >= 'A' && c <= 'Y')
{
sprintf(collect, "%i", c + 1);
}
else if (c == 'Z')
{
sprintf(collect, "%i", c - 24);
}
}
else if (islower(c))
{
if (c >= 'a' && c <= 'y')
{
sprintf(collect, "%i", c + 1);
}
else if (c == 'z')
{
sprintf(collect, "%i", c - 24);
}
}
}
}
return collect;
}
编译器给我的错误是这样的:
Cae1.c:59:30: error: variable 'collect' is uninitialized when used here [-Werror,-Wuninitialized]
sprintf(collect, "%i", c + 1);
^~~~~~~
Cae1.c:44:19: note: initialize the variable 'collect' to silence this warning
string collect;
^
= NULL
我不明白的是,当我在正确的范围内初始化变量 collect(它是一个字符串)时,为什么编译器说它未初始化?
再次为臃肿的混乱感到抱歉。
【问题讨论】:
-
CS50 的
string类型只是char *。因此,作为任何指针,它都需要指向一些分配的内存。你的没有,它根本没有已知的价值。
标签: c pointers initialization cs50