반응형
C - 문자열을 문자열 배열로 분할
C:에서 이 작업을 수행하는 방법을 완전히 확신할 수 없습니다.
char* curToken = strtok(string, ";");
//curToken = "ls -l" we will say
//I need a array of strings containing "ls", "-l", and NULL for execvp()
제가 이걸 어떻게 해야 할까요?
당신이 이미 조사를 했으니strtok
동일한 경로를 따라 계속 진행하고 공백을 사용하여 문자열을 분할합니다.' '
) 구분 기호로 사용한 다음 을 다음과 같이 사용합니다.realloc
전달할 요소를 포함하는 배열의 크기를 늘립니다.execvp
.
다음 예를 참조하십시오. 그러나 다음과 같은 점에 유의하십시오.strtok
전달된 문자열을 수정합니다.이 작업을 수행하지 않으려면 다음을 사용하여 원본 문자열의 복사본을 만들어야 합니다.strcpy
또는 유사한 기능.
char str[]= "ls -l";
char ** res = NULL;
char * p = strtok (str, " ");
int n_spaces = 0, i;
/* split string and append tokens to 'res' */
while (p) {
res = realloc (res, sizeof (char*) * ++n_spaces);
if (res == NULL)
exit (-1); /* memory allocation failed */
res[n_spaces-1] = p;
p = strtok (NULL, " ");
}
/* realloc one extra element for the last NULL */
res = realloc (res, sizeof (char*) * (n_spaces+1));
res[n_spaces] = 0;
/* print the result */
for (i = 0; i < (n_spaces+1); ++i)
printf ("res[%d] = %s\n", i, res[i]);
/* free the memory allocated */
free (res);
res[0] = ls
res[1] = -l
res[2] = (null)
다음은 MSDN에서 빌린 strtok을 사용하는 방법의 예입니다.
그리고 관련된 비트는 여러 번 호출해야 합니다.token
char*는 배열에 채울 부분입니다(그 부분을 알아낼 수 있습니다).
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
/* Establish string and get the first token: */
token = strtok( string, seps );
while( token != NULL )
{
/* While there are tokens in "string" */
printf( " %s\n", token );
/* Get next token: */
token = strtok( NULL, seps );
}
}
언급URL : https://stackoverflow.com/questions/11198604/c-split-string-into-an-array-of-strings
반응형
'source' 카테고리의 다른 글
최적화를 통해 손상된 인덱스이지만 검사 또는 분석을 통해 손상되지 않음 (0) | 2023.07.30 |
---|---|
쉼표 연산자에서 'return', 'continue' 또는 'break'이 작동하지 않는 이유는 무엇입니까? (0) | 2023.07.30 |
Axios API에서 데이터를 반환하는 중 (0) | 2023.07.30 |
socket.io 방 또는 네임스페이스? (0) | 2023.07.30 |
MSSQL 증분 정수 열이 있는 문 선택...일반적이지 않은 (0) | 2023.07.30 |