У вас есть много вариантов, предоставленных различными ответами, я просто добавляю несколько пунктов.Вы можете создать массив строк следующим образом:
I. Вы можете создать массив строк только для чтения следующим образом:
char *string_array0[] = {"Hello", "World", "!" };
Это создаст массив из 3 только для чтения строки.Вы не можете изменить символы строки в этом случае, т.е. string_array0[0][0]='R';
является недопустимым .
II.Вы можете объявить массив указателей и использовать их по мере необходимости.
char *string_array1[2]; /* Array of pointers */
string_array1[0] = "Hey there"; /* This creates a read-only string */
/* string_array1[0][0] = 'R';*/ /* This is illegal, don't do this */
string_array1[1] = malloc(3); /* Allocate memory for 2 character string + 1 NULL char*/
if(NULL == string_array1[1])
{
/* Handle memory allocation failure*/
}
string_array1[1][0] = 'H';
string_array1[1][1] = 'i';
string_array1[1][2] = '\0'; /* This is important. You can use 0 or NULL as well*/
...
/* Use string_array1*/
...
free(string_array1[1]); /* Don't forget to free memory after usage */
III.Вы можете объявить двумерный массив символов.
char string_array2[2][4]; /* 2 strings of atmost 3 characters can be stored */
string_array2[0][0] = 'O';
string_array2[0][1] = 'l';
string_array2[0][2] = 'a';
string_array2[0][3] = '\0';
string_array2[1][0] = 'H';
string_array2[1][1] = 'i';
string_array2[1][2] = '\0'; /* NUL terminated, thus string of length of 2 */
IV.Вы можете использовать указатель на указатель.
char ** string_array3;
int i;
string_array3 = malloc(2*sizeof(char*)); /* 2 strings */
if(NULL == string_array3)
{
/* Memory allocation failure handling*/
}
for( i = 0; i < 2; i++ )
{
string_array3[i] = malloc(3); /* String can hold at most 2 characters */
if(NULL == string_array3[i])
{
/* Memory allocation failure handling*/
}
}
strcpy(string_array3[0], "Hi");
string_array3[1][0]='I';
string_array3[1][1]='T';
string_array3[1][2]='\0';
/*Use string_array3*/
for( i = 0; i < 2; i++ )
{
free(string_array3[i]);
}
free(string_array3);
Следует помнить:
Если вы создаете строку только для чтения, вы не можете изменить символ в строке.
Если вы заполняете массив символов, убедитесь, что у вас есть память для размещения символа NUL и убедитесь, что вы заканчиваете свои строковые данные символом NUL.
- Если вы используете указатели и выделяете память, убедитесь, что вы проверили, правильно ли выделено память, и освободите память после использования.
- Используйте строковые функции из
string.h
для манипуляции со строками.
Надеюсь, это поможет!
PS: printf(1,"%s\n",paths[0]);
выглядит теневым