문자열을 토큰으로 분할하여 배열에 저장
문자열을 토큰으로 분할한 다음 배열에 저장하는 방법은 무엇입니까?
구체적으로, 나는 끈을 가지고 있습니다."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
'programing' 카테고리의 다른 글
java persistence native sql 매개 변수를 허용하지 않음 (0) | 2023.07.21 |
---|---|
파이썬에서 문자열을 분할하고 구문 분석하려면 어떻게 해야 합니까? (0) | 2023.07.21 |
Python의 포인터? (0) | 2023.07.16 |
함수 반환 유형 및 인수 유형을 아는 방법은 무엇입니까? (0) | 2023.07.16 |
SQL COUNT 오버플로 (0) | 2023.07.16 |