|
Перевод на Си
|
|||
---|---|---|---|
#18+
Как можно написать в Си? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 15:47 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Вообще-то это уже на Си... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 15:48 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
R[j,0] - на 0 выражение должно иметь тип указателя на объект, но имеет тип "int" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 15:51 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Код: sql 1.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 15:53 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov,ой, пардон, да R[j][0] = rp = 0; - вот здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 15:56 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
ругается, что индексируемое значение не является ни массивом, ни указателем, ни вектором ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 15:58 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
kasper_, Покажи, как объявлено R. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 16:04 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
AmKad, Код: c 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 16:09 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
в с++ бы было Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 16:11 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Чтобы работать с двумерным массивом, надо знать размер "строки" массива. Если ты объявляешь int *R - то компилятор не знает насколько длинная строка в массиве и ругается. Так что тебе придется эмулировать двумерный массив вручную. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 16:20 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
На, поиграйся: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 16:39 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
kasper_, компилируешь С-код компилятором С++, он жестче проверяет типы. или компилируй как С или обнули указатель отдельно NULL Кстати, неверно объявлен R, должно быть int **R; ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 16:59 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Siemargl компилируешь С-код компилятором С++, он жестче проверяет типы. Siemargl или компилируй как С или обнули указатель отдельно NULL Siemargl Кстати, неверно объявлен R, должно быть int **R; ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 17:15 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Спасибо, буду разбираться ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 19:15 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Что-то туплю. Сначала 1. У меня есть в буфере некая строка, её длину можно определить, как strlen(buf) 2. Мне нужно создать таблицу из двух строк, которая на С++ бы выглядела, как int R[2][strlen(buf)+1] 3. Пытаюсь реализовать это следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
что-то не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 20:16 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 20:41 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
White Owl Siemargl компилируешь С-код компилятором С++, он жестче проверяет типы. Siemargl или компилируй как С или обнули указатель отдельно NULL потому что у топика R[j][0] = rp = 0; в общем проблема из-за неверного типа R, но мой совет ниже неверен и обойти через int**R не получится (размер *R неизвестен и индексация будет неверной) White Owl Siemargl Кстати, неверно объявлен R, должно быть int **R; это да, я неправ, тут в С дырка - массив массивов немного не то, что массив указателей, хотя синтаксис один. собственно, прямого решения нет, только через пересчет индексов kasper_ Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 01:25 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
kasper_ что-то не так? **R не является R[][] даже близко. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 04:42 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
kasper_ 1. У меня есть в буфере некая строка, её длину можно определить, как strlen(buf) 2. Мне нужно создать таблицу из двух строк, которая на С++ бы выглядела, как int R[2][strlen(buf)+1] И будет у тебя int R[2][sizeof(buf)] а все строки не больше чем sizeof(buf)-1 и гарантия что (в данном месте) ты не порушишь память получив GPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 04:48 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
kasper_ Код: plaintext 1. 2. 3. 4.
Это массив указателей на массивы. Тут каждая строка "двумерного" массива может находится в любом месте памяти и для перехода с одной строки на другую надо обязательно обращаться к базовому массиву указателей. Так удобно делать если "строки" этого двумерного массива могут быть разной длины (естественно надо будет как-нибудь еще помнить длину "строк"), но для реальных ASCIIz строк такое действительно часто используется. Для целых и математики, все-же удобнее использовать массив массивов (int R[N][M] или int *R = malloc(N*M)) тогда "строки" двумерного массива строго одинаковой длины, все строки располагаются в памяти строго друг за другом и переход с одной строки на другую очень легко обрабатывается кешем процессора и намного быстрее работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 05:00 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
White Owl На, поиграйся: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 14:00 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
a guest White Owl На, поиграйся: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 15:12 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
White Owl a guest пропущено... UB. Ну и вообще я не знаю в стандарте C гарантий того, что (int*)arr это указатель на arr[0][0] (а в C++ явно гарантируется что это не так). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 15:26 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
Если посмотреть на строку в другом контексте Код: plaintext 1. 2. 3.
то это будет равносильно Код: plaintext 1.
никакого UB тут нет и быть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 15:38 |
|
Перевод на Си
|
|||
---|---|---|---|
#18+
a guestв C++ *явно* гарантируется что это не так В С++ явно гарантируется, что переменная типа "массив" неявно приводится к указателю на подлежащий тип, имеющий значение адреса первого (то бишь нулевого) элемента массива. От количества проделанных этих преобразований результат не меняется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 15:45 |
|
|
start [/forum/topic.php?fid=57&msg=40096027&tid=2017171]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 150ms |
0 / 0 |