如何在无符号字符数组中拆分元素

时间:2015-10-09 01:48:33

标签: c arrays

我有以下内容:

unsigned char input[];
unsigned char *text = &input[];

我正在接受用户输入,如下所示:

do {
    printf ("Please enter an numeric message terminated by -1:\n");
    fgets(input, sizeof(input), stdin);
}
while (input[0] == '\n')

由于我的输出会给我一系列单个字符,如何 我能不能把它们联系起来。如果我输入如下输入:

14 156 23 72 122

当我尝试使用它时,它会将其分解为:

1 4 1 5 6 ...

换句话说,当我想将它作为unsigned char传递给函数时, 我想传递'14',所以函数可以读取14的二进制,而不是 1,然后4,等等任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

现在看来,你的代码没有编译。

你不能像这样声明这些变量:

unsigned char input[]; 
unsigned char *text = &input[];

你需要说明input应该有多大。我不确定你的第二个定义是什么。

您还需要在此行之后加分号

while (input[0] == '\n')

除此之外,如果输入由已知分隔符分隔,则可以使用strtok()而不是逐字节读取字符串。

我取消了你的程序,因为它没有编译。这就是我假设您正在尝试使用您的代码,并相应地进行调整:

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

/*
 * Converts "input" separated by "delims" to an array of "numbers"
 */
size_t str_to_nums(const char* input, const char* delims, int* numbers, size_t numsize)
{
    char* parsed = malloc(strlen(input) + 1); /* allocate memory for a string to tokenize */
    char* tok; /* the current token */
    size_t curr; /* the current index in the numbers array */

    strcpy(parsed, input); /* copy the string so we don't modify the original */

    curr = 0;
    tok = strtok(parsed, delims);

    while(tok != NULL && curr < numsize) { /* tokenize until NULL or we exceed the buffer size */
        numbers[curr++] = atoi(tok); /* convert token to integer */
        tok = strtok(NULL, delims); /* get the next token */
    }

    free(parsed);

    return curr; /* return the number of tokens parsed */
}

int main(void)
{
    char input[256];
    int numbers[64];
    size_t count, i;

    puts("Please enter an numeric message terminated by -1:");
    fgets(input, sizeof(input), stdin);

    count = str_to_nums(input, " ", numbers, sizeof(numbers)/sizeof(*numbers)); /* string is separated by space */

    for(i = 0; i < count; ++i) {
        printf("%d\n", numbers[i]); /* show the results */
    }
}

P.S。这不是连接。你要找的短语是&#34;字符串拆分&#34;或者&#34;标记化&#34;。

答案 1 :(得分:-1)

试试这个!

#include <string.h>
#include <stdio.h>

    int main()
    {
       char *line;
       char *token;
       scanf(" %[^\n]s",line);
       /* get the first token */
       token = strtok(line, " ");

       /* walk through other tokens */
       while( token != NULL ) 
       {
          printf( " %s\n", token );

          token = strtok(NULL, " ");
       }

       return(0);
    }

enter image description here