通过函数C传递变量

时间:2012-04-27 14:40:44

标签: c function pointers chars

您好我刚刚开始学习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

4 个答案:

答案 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个字符的字符串..