我有一个char *类型的标记,我想获得第二个元素。例如,令牌都包含一个4长的课程编号,如1405
,我想抓住第二个字符或4,然后把它变成一个整数。我使用strcpy将字符串添加到char字符串数组中以获取4但我得到一些错误,我不太确定如何修复它们。这是我的代码
#include <stdio.h>
#include <string.h>
int search(struct id array[],char* tok);
int main(void)
{
char* token2 = "1405";
char* text[] = malloc(strlen(token2)+1);
strcpy(text,token2);
int i,number;
for(i=0;i<4;i++)
if(i==1)
{
number = atoi(token2[i]); }
printf("%d\n",number);
我收到以下编译错误
gcc structures_arrayof.c
structures_arrayof.c: In function ‘main’:
structures_arrayof.c:23:20: warning: incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]
char* text[] = malloc(strlen(token2)+1);
^
structures_arrayof.c:23:5: error: invalid initializer
char* text[] = malloc(strlen(token2)+1);
^
structures_arrayof.c:24:5: warning: passing argument 1 of ‘strcpy’ from incompatible pointer type [enabled by default]
strcpy(text,token2);
^
In file included from structures_arrayof.c:5:0:
/usr/include/string.h:129:14: note: expected ‘char * __restrict__’ but argument is of type ‘char **’
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
答案 0 :(得分:1)
atoi
用于将字符串转换为整数。但是,您想要转换单个字符。
你可以写:
number = token2[i] - '0';
这是有效的,因为数字'0'
到'9'
具有连续的字符代码。没有必要使用malloc或其他任何东西。
答案 1 :(得分:1)
使用你正在做的事情......
这应该清除第一组错误。
char* text = malloc(strlen(token2)+1);
您需要一个指向char字符串的指针。
要进行转换,您需要null终止字符串。
token2[i+1]=0;
然后你可以
number = atoi(token2[i]);
答案 2 :(得分:0)
第一个错误:
您忘记#include <stdlib.h>
获取malloc
。
第二个错误:
一个字符串,表示为char
的指针,因此您只需要
char *text = malloc(strlen(token2)+1);
放下支架。
或者,由于大小在编译时是已知的,因此您可以使用malloc
char text[5];
的情况下声明它。
第三个错误:
它会警告您使用了错误类型的指针。这应该通过改变上面提到的声明来解决。
第四个错误(不在您的粘贴编译器输出中):
正如Matt McNabb指出的那样,你不应该使用atoi。用
替换它
number = token2[i] - '0';
这将减去ASCII vaule为0,返回字符的整数值。
其他评论:我建议更改if
语句的间距/缩进样式。将一个左大括号放在它自己的行上,并且在最后一个语句的同一行上的一个右大括号非常非常规,它会降低可读性。
我建议你选择一种标准风格并尝试坚持下去。就个人而言,我喜欢Linux Kernel Coding Style,但随意选择适合你的人。