整数从 stringv[] 接收到错误值
Integer receives wrong value from stringv[]
Caesar Cypher - 基本加密。
例如,即使第二个命令行 (argv[1]) 等于 3,我也会请求您的帮助来理解为什么变量 k 会收到负值。
int main (int argc, string argv[])
{
string text;
int k = 0;
do
{
printf("Type in a plain text:\n");
text = GetString();
//k receives wrong value
k = (int) argv[1];
// Sanity check
printf ("argv[1] is %s and k is %d\n", argv[1], k);
}
while (k < 0);
您不能只将字符串转换为 int。您需要实际解析它。您可以使用 stdlib.h
中包含的 atoi
函数。您需要输入:
#include <stdlib.h>
在您的文件顶部并更改行:
k = (int) argv[1];
至:
k = atoi(argv[1]);
您在这里需要做的是 conversion
而不是 type-cast
,因此类型转换为 int
无济于事,您需要将 char *
到 int
使用库函数,如常用的 int atoi (const char *str)
,它在头文件 stdlib.h
中定义。别忘了 #include
它。 !
但是,我建议使用 strtol
,因为它具有强大的错误报告功能。它指定溢出时的 return 值(returns LONG_MIN
在 underflow
的情况下和 LONG_MAX
在溢出的情况下)并且还允许用户设置转换期间要遵循的 base
。
Caesar Cypher - 基本加密。
例如,即使第二个命令行 (argv[1]) 等于 3,我也会请求您的帮助来理解为什么变量 k 会收到负值。
int main (int argc, string argv[])
{
string text;
int k = 0;
do
{
printf("Type in a plain text:\n");
text = GetString();
//k receives wrong value
k = (int) argv[1];
// Sanity check
printf ("argv[1] is %s and k is %d\n", argv[1], k);
}
while (k < 0);
您不能只将字符串转换为 int。您需要实际解析它。您可以使用 stdlib.h
中包含的 atoi
函数。您需要输入:
#include <stdlib.h>
在您的文件顶部并更改行:
k = (int) argv[1];
至:
k = atoi(argv[1]);
您在这里需要做的是 conversion
而不是 type-cast
,因此类型转换为 int
无济于事,您需要将 char *
到 int
使用库函数,如常用的 int atoi (const char *str)
,它在头文件 stdlib.h
中定义。别忘了 #include
它。 !
但是,我建议使用 strtol
,因为它具有强大的错误报告功能。它指定溢出时的 return 值(returns LONG_MIN
在 underflow
的情况下和 LONG_MAX
在溢出的情况下)并且还允许用户设置转换期间要遵循的 base
。