programing

문자열을 토큰으로 분할하여 배열에 저장

lastmoon 2023. 7. 16. 17:47
반응형

문자열을 토큰으로 분할하여 배열에 저장

문자열을 토큰으로 분할한 다음 배열에 저장하는 방법은 무엇입니까?

구체적으로, 나는 끈을 가지고 있습니다."abc/qwe/jkh"헤어지고 싶어요"/"그런 다음 토큰을 배열에 저장합니다.

출력은 다음과 같습니다.

array[0] = "abc"
array[1] = "qwe"
array[2] = "jkh"

제발 도와주세요

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

int main ()
{
    char buf[] ="abc/qwe/ccd";
    int i = 0;
    char *p = strtok (buf, "/");
    char *array[3];

    while (p != NULL)
    {
        array[i++] = p;
        p = strtok (NULL, "/");
    }

    for (i = 0; i < 3; ++i) 
        printf("%s\n", array[i]);

    return 0;
}

사용할 수 있습니다.

char string[] = "abc/qwe/jkh";
char *array[10];
int i = 0;

array[i] = strtok(string, "/");

while(array[i] != NULL)
   array[++i] = strtok(NULL, "/");

왜죠strtok()좋지 않은 생각입니다

사용 안 함strtok()일반 코드에서는,strtok()사용하다static문제가 있는 변수입니다.임베디드 마이크로컨트롤러의 몇 가지 사용 사례는 다음과 같습니다.static변수는 의미가 있지만 대부분의 다른 경우에는 사용하지 않습니다. strtok()하나 이상의 스레드가 사용할 때, 인터럽트에서 사용될 때 또는 연속 호출 사이에 둘 이상의 입력이 처리되는 다른 상황이 있을 때 예상치 못한 동작을 합니다.strtok()이 예를 고려해 보십시오.

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

//Splits the input by the / character and prints the content in between
//the / character. The input string will be changed
void printContent(char *input)
{
    char *p = strtok(input, "/");
    while(p)
    {
        printf("%s, ",p);
        p = strtok(NULL, "/");
    }
}

int main(void)
{
    char buffer[] = "abc/def/ghi:ABC/DEF/GHI";
    char *p = strtok(buffer, ":");
    while(p)
    {
        printContent(p);
        puts(""); //print newline
        p = strtok(NULL, ":");
    }
    return 0;
}

출력을 예상할 수 있습니다.

abc, def, ghi,
ABC, DEF, GHI,

하지만 당신은 얻을 것입니다.

abc, def, ghi,

당신이 전화를 하기 때문입니다.strtok()printContent()내부 상태 재설정strtok()에서 생성된.main()돌아온 후의 내용은strtok()비어 있고 다음 호출:strtok()돌아온다NULL.

대신 수행해야 할 작업

사용할 수 있습니다.strtok_r()POSIX 시스템을 사용할 때, 이 버전은 필요하지 않습니다.static변수라이브러리가 제공하지 않는 경우strtok_r()당신은 그것의 당신만의 버전을 쓸 수 있습니다.이것은 어렵지 않아야 하며 스택 오버플로는 코딩 서비스가 아니므로 스스로 작성할 수 있습니다.

언급URL : https://stackoverflow.com/questions/15472299/split-string-into-tokens-and-save-them-in-an-array

반응형