C - 使用 strtok 将字符串数组拆分为字符数组
C - Using strtok to split an array of strings into an array of characters
这是 的延续。
到目前为止,我已成功获取用户输入并将其存储到字符串中。比如我转这个:
1:E 2:B 2:B 2:B 4:G
进入这个:
1:E
2:B
2:B
2:B
4:G
这是一个字符串数组。
这是我下一步想做的,但对我不起作用:
1
E
2
B
2
B
2
B
4
G
这些中的每一个都是存储在字符数组中的字符。
下面是我可以正常工作的代码块:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_INPUT_SIZE ( (sizeof(char)*96) + (sizeof(int)*48) )
int main () {
char *input = malloc(MAX_INPUT_SIZE);
printf("Example input: 1:E 2:C 2:C 2:C 8:D\n");
printf("Your input:\n\n");
fgets(input, MAX_INPUT_SIZE, stdin);
// Removing newline
if ( (strlen(input) > 0) && (input[strlen(input) - 1] == '\n') )
input[strlen(input) - 1] = '[=11=]';
int i = 0;
char *p = strtok(input, " ");
char *array[MAX_PAIRS];
while (p != NULL){
array[i++] = p;
p = strtok(NULL, " ");
}
// Checking the array
int j = 0;
for (j=0; j<i; j++) {
printf("\n %s", array[j]);
}
这段代码工作得很好。接下来是我目前正在使用的代码:
int k = 0;
int l = 0;
char *letter = malloc( sizeof(char) * (i * 2) );
for (k=0; k<i; k++) {
char *q = strtok(array[k], ":");
while (q != NULL) {
letter[l++] = q;
q = strtok(NULL, ":");
}
}
// Checking the array
int m = 0;
for (m=0; m<l; m++) {
printf("\n %c", letter[m]);
}
return 0;
}
当我去检查数组时,它为我想要打印的每个字符打印了一个垃圾符号。我不明白我在这里做错了什么。
letter
是 char
.
的数组
q
是一个 char*
.
因此,letter[l++] = q
不会执行您想要的操作,因为您现在正在将 char*
存储到 char
中;我想编译器会吐出一些关于截断的警告。
这是
到目前为止,我已成功获取用户输入并将其存储到字符串中。比如我转这个:
1:E 2:B 2:B 2:B 4:G
进入这个:
1:E
2:B
2:B
2:B
4:G
这是一个字符串数组。
这是我下一步想做的,但对我不起作用:
1
E
2
B
2
B
2
B
4
G
这些中的每一个都是存储在字符数组中的字符。
下面是我可以正常工作的代码块:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_INPUT_SIZE ( (sizeof(char)*96) + (sizeof(int)*48) )
int main () {
char *input = malloc(MAX_INPUT_SIZE);
printf("Example input: 1:E 2:C 2:C 2:C 8:D\n");
printf("Your input:\n\n");
fgets(input, MAX_INPUT_SIZE, stdin);
// Removing newline
if ( (strlen(input) > 0) && (input[strlen(input) - 1] == '\n') )
input[strlen(input) - 1] = '[=11=]';
int i = 0;
char *p = strtok(input, " ");
char *array[MAX_PAIRS];
while (p != NULL){
array[i++] = p;
p = strtok(NULL, " ");
}
// Checking the array
int j = 0;
for (j=0; j<i; j++) {
printf("\n %s", array[j]);
}
这段代码工作得很好。接下来是我目前正在使用的代码:
int k = 0;
int l = 0;
char *letter = malloc( sizeof(char) * (i * 2) );
for (k=0; k<i; k++) {
char *q = strtok(array[k], ":");
while (q != NULL) {
letter[l++] = q;
q = strtok(NULL, ":");
}
}
// Checking the array
int m = 0;
for (m=0; m<l; m++) {
printf("\n %c", letter[m]);
}
return 0;
}
当我去检查数组时,它为我想要打印的每个字符打印了一个垃圾符号。我不明白我在这里做错了什么。
letter
是 char
.
的数组
q
是一个 char*
.
因此,letter[l++] = q
不会执行您想要的操作,因为您现在正在将 char*
存储到 char
中;我想编译器会吐出一些关于截断的警告。