У меня возникло несколько вопросов насчёт работы с двумерными массивами в C и, одновременно с этим, работа с этими массивами из Питона. На Си я начал прогать совсем недовно. Вот есть код на Си, который в идеале должен превращать строку в массив слов (надо просто для тренировки). Я попытался сделать его наиболее простым:
char **splitter (char *tos){
int i = 0;
int j = 0;
int y = 0;
static char words[100][100];
while (tos[i]){
if (tos[i] != ' '){
words[j][y] = tos[i];
y++;
}
else{
y = 0;
j++;
}
i++;
}
return words;
}
Дальше я обращаюсь к библиотеке с этой функцией из Питона
from ctypes import *
spll = CDLL('./splitter.dll')
s = "собака стреляет в охотника"
bs = s.encode("cp1251")
spli = spll.splitter
spli.argtypes = [c_char_p]
spli.restype = c_char_p * 4
n = spli(bs)
print(n)
Питон мне печатает вот что:
<__main__.c_char_p_Array_4 object at 0x03FED8A0>
Вопросы в следующем: 1) Почему он не печатает мне двумерный массив, а печатает такую строчку? 2) Можно ли задать при помощи ctypes массив с произвольным числом элементов? То есть, как сделать так, чтобы я мог подать строку с произвольным количеством слов на вход. 3) Почему не работает
static char *words[100];
вместо
static char words[100][100];
?
С массивами символов ведь так можно
Простите, если вопросы слишком простые)