这是代码但我得到的错误,实时的参数太少以及char之前的预期表达式 .
我正在尝试编写一个方法,然后通过该方法传递信息(输入)并获取一个值(输出)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char realtime(char input[20], char output[25]){
//char input[20];
//char output [25];
char year[5];
char month[3];
char day[3];
char hour[3];
char min[3];
char sec[3];
strncpy(year, input, 4);
year[4] = '\0';
strncpy(month, input + 4, 2);
month[2] = '\0';
strncpy(day, input + 6, 2);
day[2] = '\0';
strncpy(hour, input + 8, 2);
hour[2] = '\0';
strncpy(min, input + 10, 2);
min[2] = '\0';
strncpy(sec, input + 12, 2);
sec[2] = '\0';
sprintf(output, "%s-%s-%sT%s:%s:%s", year, month, day, hour, min, sec);
return 0;
}
int main(){
char input = "20181204193456";
realtime( char input[20], char output[25]);
printf("Parsed Date %s", output);
}
6 回答
您不能将字符串文字分配给类似的char数组 . 而不是这个:
你必须这样做:
此外,这里打电话:
只是功能签名的副本 . 而是这样做:
您还需要事先定义
output
. 总而言之,您的main
函数应该如下所示:另请注意添加的
return 0;
表示程序执行成功 .当然,通过直接将字符串文字交给函数,也可以完全没有
input
完成:您需要在main中定义一个变量来保存输出,并且定义和实时调用是不正确的 . 也许这会更好:
是无效的 . 这是一个单个字符输入,使用指向字符串文字
"20181204193456"
的指针内容进行初始化 . 这不是你想要的 . 你要:这是一个字符数组(读作:'string'),它使用字符串文字
"20181204193456"
的内容初始化 . 数组的长度包括末尾的终止字符,但没有指定大小[]
,我们将其保留为编译器自动检测到的 .这是错误的,也是无效的 . 你要:
首先,您要保留25个字符的输出空间,以便写入任何内容 . 然后你想运行该函数,第一个参数输入,第二个输出 .
在修好这些错误之后你就好了 .
然而:
没问题,但最好使用
snprintf
:没有
25
和snprintf
如果长度意外地长,则会导致写入数组大小 . 这里看起来似乎有些变化,但最好随处使用它 .没关系 . 但你可以这样说:
甚至更好:
所以整个功能只是:
全局声明数组
input
和output
,以便您可以跨方法(或)函数使用它 . 像这样的东西,首先,在
main
函数中,声明并初始化:char input = "20181204193456";
在C中,char是1字节类型 . C中的字符串由字符数组表示 . 因此,您需要:
char input[15] = "20181204193456";
虽然字符串中只有14个字符,但您需要15个字符,因为在C中,每个字符串都以
0
字节终止 . 在这种情况下,这是自动完成的 . 另一种方式是:char input[] = "20181204193456"
在这种情况下,编译器将确定您需要多少空间 .
接下来,您的函数调用不正确:
realtime( char input[20], char output[25]);
调用函数时,您应该只使用参数名称,而不是它们的类型,如下所示:
realtime(input, output);
鉴于
output
isn 't declared, you' ll首先需要声明它 . 工作代码如下:您正在定义char而不是字符串 . 所以尝试: