我是C的新手。 我试图做一个简单的C函数,它将拆分字符串(char数组)。
以下代码无法正常工作,因为我不知道如何终止数组中的char数组。在函数中传递了char指针。一个包含要拆分的原始常量char数组,另一个指针是多维数组,它将每个拆分部分存储在单独的char数组中。
我遇到的功能显然有很多喧嚣,主要是因为我缺乏C经验。
我认为在这个函数中我无法实现的是使用'\ 0'终止单个数组。 这是代码:
void splitNameCode(char *code, char *output);
void splitNameCode(char *code, char *output){
int OS = 0; //output string number
int loop;
size_t s = 1;
for (loop = 0; code[loop]; loop++){
if (code[loop] == ':'){
output[OS] = '\0'; // I want to terminate each array in the array
OS ++;
}else {
if (!output[OS]) {
strncpy(&output[OS], &code[loop], s);
}else {
strncat(&output[OS], &code[loop], s);
}
}
}
}
int main (int argc, const char * argv[]) {
char output[3][15];
char str[] = "andy:james:john:amy";
splitNameCode(str, *output);
for (int loop = 0; loop<4; loop++) {
printf("%s\n", output[loop]);
}
return 0;
}
答案 0 :(得分:1)
如果我理解您的意图正确,您就会尝试使用andy:james:john:amy
这样的字符串并到达andy\0james\0john\0amy
。如果是这种情况,那么您的代码可以大大简化:
void splitNameCode(char *code, char *output){
int loop;
strncpy(code, output, strlen(code));
for (loop = 0; output[loop]; loop++){
if (output[loop] == ':'){
output[loop] = '\0'; // I want to terminate each array in the array
}
}
}
答案 1 :(得分:1)
这是一个适合您的工作计划。如果您需要任何解释,请告诉我。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void splitNameCode(char *code, char **output) {
int i = 0;
char* token = strtok(code, ":");
while (token != NULL) {
output[i++] = token;
token = strtok(NULL, ":");
}
}
int main (int argc, const char *argv[]) {
char* output[4];
char input[] = "andy:james:john:amy";
splitNameCode(input, output);
for (int i = 0; i < 4; i++) {
printf("%s\n", output[i]);
}
return 0;
}