从指针数组返回字符串的函数

时间:2018-07-05 05:19:32

标签: c arrays string function pointers

我需要声明一个从指针数组返回字符串的函数..我正在编程PIC,并且正在使用LCD ..作为接口。 有了这段代码,我有了我想要的东西:

<div class="divTable">
  <div class="thead">
    <div class="tr">
      <div class="th">Filename</div>
      <div class="th">Type</div>
      <div class="th">Size</div>
    </div>
  </div>
  <div class="tbody">
    <div class="tr">
      <div class="td">Why Cannot Work.jpg</div>
      <div class="td">Image</div>
      <div class="td">12.1 KB</div>
    </div>
    <div class="tr">
      <div class="td">Lorem Ipsum.jpg</div>
      <div class="td">Image</div>
      <div class="td">12.1 KB</div>
    </div>
    <div class="tr">
      <div class="td">Dolor Sir Amet.jpg</div>
      <div class="td">Image</div>
      <div class="td">12.1 KB</div>
    </div>
  </div>
</div>

enter image description here

我得到“ 5” ..这就是我想要的..但​​是当我尝试为此创建函数时。.

// CONFIGURATION BITS
#pragma config FOSC = HS   // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF  // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF   // Low-Voltage In-Circuit Serial Programming Enable bit
#pragma config CPD = OFF   // Data EEPROM Memory Code Protection bit 
#pragma config WRT = OFF   // Flash Program Memory Write Enable bits 
#pragma config CP = OFF    // Flash Program Memory Code Protection bit

#define _XTAL_FREQ 8000000

// DEFINING LCD PINS
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7

#include <xc.h>

#include "lcd.h"

#include <stdio.h>
#include <stdlib.h>

void main()
{

    TRISD = 0x00;           //PORTD as output for LCD
    Lcd_Init();
    Lcd_Clear();

    while(1)
    {

        Lcd_Set_Cursor(1,1);

        char *keypress;
        int key = 2;
        char *key2[] = {"3", "4", "5"}; 
        keypress = key2[key];

        Lcd_Write_String(keypress);

        __delay_ms(50);

    }
}

enter image description here

我不明白为什么会得到mm ..我不确定是否声明了错误的函数,或者指针做错了,谢谢

3 个答案:

答案 0 :(得分:2)

您的函数返回char,但您返回char *

将返回类型更改为char *

并提高编译器警告以捕获那些东西。

答案 1 :(得分:1)

    char *key2[] = {"3", "4", "5"}; 
    return key2[key];

在这里,key2char指针的数组,key2[key]是指向数组key的索引key2的指针,该指针指向a的第一个字符字符串。
现在,查看函数kbd_getc()的返回类型:

char kbd_getc(){
^^^^

它是char类型。这意味着,您正在从假定要返回字符的函数中返回字符串。
如果我编写了一个简单的程序来检查您的kbd_getc(),则会收到有关语句return key2[key];的警告消息-

warning: incompatible pointer to integer conversion returning 'char *' from a function with result type 'char';

如果我将返回类型更改为char *

char * kbd_getc(){

警告消息消失,我得到所需的输出:

$ ./a.out 
5

答案 2 :(得分:-2)

只需尝试一下

char kbd_getc(){

int key = 2;
char *key2[] = {"3", "4", "5"}; 
char a = key2[key];
return a ;

}

我认为您正在返回数组。

您需要返回一个字符。

谢谢