您好,这是我的代码,我对此非常困惑。 我正在将一个字符串传递给一个函数,我正在制作一个整数数组,我需要在main函数中使用它。我是一个新手,我想学习如何在这些类型的情况下取出数组。
#include <stdio.h>
#include <stdlib.h>
int *encrypt (char string[]);
char string[1000];
int intstring[10000], last;
int main()
{
gets(string);
encrypt(string[1000]);
for (int i = 0; i < strlen(string); i++){
printf("%d ", intstring[i]);
}
}
int * encrypt(char string[])
{
for (int i = 0; i < strlen(string); i++)
{
if (string[i] >= 65 && string[i] <= 90)
{
string[i] = string[i] - 65;
}
else if (string[i] >= 97 && string[i] <= 122)
{
string[i] -= 96;
}
else if (string[i] == 32)
{
string[i] -= 6;
}
else if (string[i] == 46)
{
string[i] -= 19;
}
intstring[i] = string[i];
}
return intstring;
}
答案 0 :(得分:2)
你在这里混淆了一些事情。 这样:
int intstring[10000]
是全局数组,所以不需要从函数中返回它,你可以直接在main中访问它。
此:
encrypt(string[1000]);
也错了,你必须这样称呼它:
encrypt(string);
如果需要,您也可以将长度作为单独的参数传递。
答案 1 :(得分:1)
所以,有几件事情没有特别的顺序:
首先,永远不要使用gets
; 将在您的代码中引入一个失败点。请改用fgets
。截至2011年标准,它已从标准库中删除。不要使用它。
其次,如果你可以帮助它,你想避免使用全局变量。理想情况下,函数应该通过参数和返回值(以及支持它们的异常)进行通信。您可以更改函数,使string
和intstring
作为参数,如下所示:
void encrypt( char *string, int *intstring)
{
// body of encrypt
}
请注意,由于您将intstring
作为参数传递,因此您无需返回它,因此我键入了函数以返回void
。来自main
的电话看起来像是:
int main( void )
{
char string[10000];
int intstring[10000];
...
encrypt( string, intstring );
...
}
还要注意功能参数的类型;当您将数组表达式作为函数参数传递时,它会从类型“T
”数组“衰减”到“指向T
的指针”。当你传递数组参数时,你只需要指定名称; string[10000]
指的是string
数组末尾之后的下一个字符。
在encrypt
函数的正文中,您正在修改string
的内容,只需将结果复制到intstring
;你确定那是你想做的吗?您确定不想保留string
的原始内容吗?
答案 2 :(得分:0)
将数组传递给函数时,不需要给出下标。所以把它改成这样。
encrypt(string);
之后您不需要返回全局数组。所以你可以使用函数作为void返回数据类型。
void encrypt (char string[]);