-1

您好,我刚开始学习 C,我想知道为什么我在这里遇到问题.. 我希望传递一个 char 指针

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

4 回答 4

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;你说参数应该是 type char,但你传递了 a char *。因此,虚假输出。

如果要打印出整个字符串 "1234",则需要将该行更改为

printf("Check value = %s\n", checkchar);

这次我们使用%s转换说明符来告诉printfcheckchar指向一个以 0 结尾的数组char(又名字符串)。

于 2012-04-27T14:56:28.963 回答
0

It's been a while since I've done C, but I can see a few problems here, temp = "123A" actually requires an array for 5 characters (one of which is to include the '\0' string terminating character).

Secondly, the line printf("Check Value = %c \n", checkchar); seems to be trying to print a memory pointer as a character, change it to the following: printf("Check Value = %s \n", checkchar); and it will output each character in the array until it hits the terminating character.

于 2012-04-27T14:55:49.223 回答
0

这一点都不清楚。您是否分配了任何价值temp?如果是这样,是什么?

将您的原型设置为:

int checkIfUniqueCourseNo(char* checkchar, int);

因为根本不清楚你从哪里得到 4。

于 2012-04-27T14:44:36.593 回答
0

这里有几件事要看,你需要好好看看你拥有的数据,它是如何表示的以及你想用它做什么。

您的课程代码似乎是一个四字符的字符串,您应该知道,传统上,C 中的字符串在末尾还包含一个额外的字节,其值为 0 (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 个字符的字符串..

于 2012-04-27T19:16:26.357 回答