将字符串复制到char数组中

时间:2014-07-09 00:13:29

标签: c arrays string

我有一个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)

3 个答案:

答案 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,但随意选择适合你的人。