在c中获取单个const char *

时间:2013-05-01 21:24:02

标签: c char

我试图从一周的这一天获得个人字符。这就是我所拥有的。

const char *daysOfTheWeek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
const char *tc = daysOfTheWeek[dayOfWeek];
text_layer_set_text(&dow_one, &tc[0]);
text_layer_set_text(&dow_two, &tc[1]);
text_layer_set_text(&dow_three, &tc[2]);  

出现的是什么 & dow_one = ...
& dow_two = ed
& dow_three = d

我想要的是什么 & dow_one = W
& dow_two = e
& dow_three = d

如果我删除&并且只使用tc [0]我得到编译错误。

83:9:错误:传递'text_layer_set_text'的参数2使得整数指针没有强制转换[-Werror] /Users/myke/pebble_dev/pebble-sdk-release-001/watches/iWatch/include/pebble_os.h:677:6:注意:预期'const char *'但参数类型为'char'

这是一个无法访问sprintf的嵌入式系统。只有纯C

1 个答案:

答案 0 :(得分:1)

使用您的代码,您指向“位于字符串中间”的位置(例如,&tc[1]是指向“此字符串tc的指针,但从位置[1]开始“),从那里你得到”一切直到结束('\0'终结者)“。如果只需要一个字符,则应将单个字符串复制到长度为1 + 1的空终止字符串:

static char dow1[2];
static char dow2[2];
static char dow3[2];
char tc[]="Wed";

dow1[0] = tc[0]; dow1[1]='\0';
dow2[0] = tc[1]; dow2[1]='\0';
dow3[0] = tc[1]; dow3[1]='\0';

这假设tc包含您感兴趣的字符。现在您可以

text_layer_set_text(&dow_one, dow1);
text_layer_set_text(&dow_two, dow2);
text_layer_set_text(&dow_three, dow3);

利用dow1是char数组的名称以及指向第一个元素的指针这一事实。根据你自己的评论,我将它们声明为static - 这意味着变量在声明返回的函数之后继续存在,并且我认为这很重要,因为稍后可能会为了显示目的引用该值。

当然,如果你真的需要一个角色,那就是

char c1, c2, c3;
c1 = tc[0];
c2 = tc[1];
c3 = tc[2];

这取决于你想如何使用它 - 从你的问题中不清楚你的text_layer_set_text()函数是做什么的。我用Google搜索了一下,我认为上面的内容应该对你好 - 但我没有使用过Pebble,所以我无法百分百肯定。