您好我刚刚开始学习C而且我想知道为什么我在这里遇到问题.. 我希望传递一个字符指针
char *temp;
进入函数即调用函数
checkIfUniqueCourseNo(temp,k);
带有原型
int checkIfUniqueCourseNo(char checkchar[4],int);
和函数头
int checkIfUniqueCourseNo(char checkchar[4], int k)
我确定我在这里做了一些非常愚蠢的事,但我不确定如何解决它:( 提前致谢。 ps我的错误是checkchar [4]输出一个P ...
示例---
temp = "123A"
checkIfUniqueCourseNo(temp,k);
int checkIfUniqueCourseNo(char checkchar[4], int k){
printf("CheckifUniqueCourse\n");
printf("Check Value = %c \n", checkchar);
return 0;
}
输出=检查值= P
答案 0 :(得分:1)
temp = "123A"
checkIfUniqueCourseNo(temp,k);
int checkIfUniqueCourseNo(char checkchar[4], int k){
printf("CheckifUniqueCourse\n");
printf("Check Value = %c \n", checkchar);
^^^^^^^^^
return 0;
}
如果您要打印checkchar
的第一个字符,则需要将此行更改为
printf("Check Value = %c\n", *checkchar);
或
printf("Check Value = %c\n", checkchar[0]);
在函数参数声明的上下文中,T a[N]
和T a[]
等同于T *a
; a
被声明为指向T
的指针,而不是T
的数组。
当你写
时printf("Check Value = %c\n", checkchar);
你骗了printf
;你说参数应该是char
类型,但是你传递了char *
。因此虚假输出。
如果您要打印整个字符串 "1234"
,则需要将该行更改为
printf("Check value = %s\n", checkchar);
这次我们使用%s
转换说明符告诉printf
checkchar
指向0终止的char
数组(a.k.a。一个字符串)。
答案 1 :(得分:0)
这一点都不清楚。您是否正在为temp
分配任何值?如果是这样,是什么?
将原型设为:
会更有意义int checkIfUniqueCourseNo(char* checkchar, int);
因为你从哪里得到4来都不清楚。
答案 2 :(得分:0)
我已经做了一段时间,但是我可以看到一些问题,temp = "123A"
实际上需要一个5个字符的数组(其中一个是包含'\ 0'字符串终止字符)。
其次,行printf("Check Value = %c \n", checkchar);
似乎试图将内存指针打印为字符,将其更改为以下内容:printf("Check Value = %s \n", checkchar);
它将输出数组中的每个字符,直到它到达终止位置字符。
答案 3 :(得分:0)
这里有几点需要注意,你需要仔细研究一下你拥有的数据,它是如何表现出来的,以及你想用它做些什么。
你的课程代码似乎是一个四字符串,你应该知道,传统上,C中的字符串最后还包含一个额外的字节,其值为零(NUL),以便很多存在的字符串函数知道它们已到达字符串的末尾。
在您的情况下,您的四位数代码占用五个字节的内存。所以不适合将它传递给你的功能。
如果我是你,我会传递一个像这样的指针: -
int checkIfUniqueCourseNo(char* coursecode, int k ) {
int rv = -1;
if ( coursecode == NULL ) return rv;
//...
我不知道K代表什么,是吗?
一旦你的函数中有了你的字节序列,你可以稍后通过对数据执行一些简单的边界检查来节省很多时间:
//...
if ( strlen(coursecode) > 4 ){
fprintf(stderr,"course code too long\n");
return rv;
}
if ( strlen(coursecode) < 4 ){
fprintf(stderr,"course code too short\n");
return rv;
}
//...
你现在可以确定你有一个4个字符的字符串..