powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужно переписать фрагмент программы на PHP в C
13 сообщений из 13, страница 1 из 1
Нужно переписать фрагмент программы на PHP в C
    #32853175
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
Нужно переписать фрагмент программы на PHP :
$variable='value'; $string='Variable='.$variable.' \n';

в C :
#include </usr/include/stdarg.h>
#include </usr/include/stdio.h>
#include </usr/include/stdlib.h>
#include </usr/include/string.h>
char Variable[5], String[100]; int main (int argc, char **argv) { char Variable[]="value";
char String[]="variable="; // + (char*) Variable[];? //+Variable?
exit(EXIT_SUCCESS); }

Не удаётся убедить GCC, что переменная есть одна переменная плюс другая переменная.
Отсюда вопрос, как написать, чтоб компилятор понял, что от него хотят.

А если вдруг переменной попытаются присвоить новое значение, откомпилировать становится невозможно - компилятор пишет:
SuperProgram.c: In function `main':
SuperProgram.c:line i+j: redeclaration of `String'
SuperProgram.c:line i: `String' previously declared here

Как компилятору объяснить, что переменная не является константой, но является переменной?
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853178
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В C нельзя складывать массивы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include </usr/include/stdio.h>

char Variable[ 5 ], String[ 100 ]; 
int main (int argc, char **argv) 
{ 
char Variable[]="value";
char String[]="variable=";
//The strcat function appends strSource to strDestination and terminates the resulting string with a null character.
strcat(String, Variable);

printf("%s\n", String);
exit(EXIT_SUCCESS); 
}
"Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853182
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах да, не забудьте заменить

Код: plaintext
1.
char Variable[ 5 ]
на
Код: plaintext
1.
char Variable[ 6 ]

ибо строка "value" занимает 6 байт, учитывая завершаюший \0

"Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853183
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совсем я глуп.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include </usr/include/stdio.h>

int main (int argc, char **argv) 
{ 
char Variable[]="value";
char String[]="variable=";
//The strcat function appends strSource to strDestination and terminates the resulting string with a null character.
strcat(String, Variable);

printf("%s\n", String);
exit(EXIT_SUCCESS); 
}

 

"Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853211
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
Да, красивый код на Ц невозможен, во всяком случае в операциях со строками.
Спасибо за совет, жаль доков у меня нет, буду пробовать.
А как быть с руганью компилятора, что второй раз присвоить переменной новое значение невозможно?
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853213
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На C пишут быстрый код, а не красивый.

Ошибка была - повторное объявление переменной, в моем последнем посте я ее исправил. еще раз - нельзя присвоить массиву массив операцией =. Нельзя прибавить к массиву массив +, можно сделать это только поэлементно.

"Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853222
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
К сожалению, нет. Достаточно раскомментировать предпоследнюю строчку:

#include </usr/include/stdio.h>
int main (int argc, char **argv) {
char Variable[]="value"; char String[]="variable=";
strcat(String, Variable);
char Variable[]="value";
exit(0); }

и компилятор ругнется. Переменная==Переменная , не так ли?
т.е. переменной можно (и при необходимости нужно) присваивать переменные значения.

strcat.c: In function `main':
strcat.c:6: redeclaration of `Variable'
strcat.c:4: `Variable' previously declared here

Если Ц быстр, каким прилагательным, характеризующим скорость, назвать Ассемблер, может быть абсолютно быстрым? Пример копирования строк:

lea esi, offset Source1
lea edi, offset Target
mov ecx, offset [counter1]
rep movsb
lea esi, offset Source2
mov ecx, offset [counter2]
rep movsb

Реальная задача сложнее, нужно достаточно много формировать строку, состоящую из нескольких констант и переменных. Код, если и получится, то громоздким.
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853318
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почитайте же доку, это НЕ php! Если надо формировать строку из кучи других, рекомендую
sprintf(), функция, аналогичная printf но с выводом в строку. Теперь еще раз. Variable[]
это не переменная. Такая форма применяется _только_ при определении переменной,
и указывает на то, что длина массива будет определятся константой, что Вы и делаете(
char variable[]="тру-ляля";) В дальнейшем вы имеете _константный_ указатель на первый
байт вашей строки. Это значит, что variable _всегда_ указывает на первый байт, Вы
не можете поменять значение указателя, Вы можете поменять значение по этому адресу.
Более того, компилятор сразу же "забыл" длину вашего массива и позволит вам совершенно
спокойно записать например 100 байт(variable[100]=3;), что, я уверен, в вашем случае
приведет к segmentation fault. В вашем же примере на ассемблере можно сделать и быстрее,
убрав строчки с mov cx, и применив repnz, копировать пока не 0, т.к. конец строки
в С - \0 байт. Итак, почитайте хоть краткий курс по С. Опыт программирования на
php может оказаться плачевным. Говорю как программист С/C++ и php.
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853338
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
Спасибо за совет, буду разбираться. sprintf() - вероятнее самая подходящая функция. В том-то и дело, что читать собственно нечего. Нет описания языка и библиотек. Приходится додумывать и пробовать. Дока на гцц.гну.орг - полный юзелесс. Для кого и зачем gcc-html.tar.gz - полная загадка. Что либо внятного через поисковики пока не нашёл. Присоветуйте полезную урлу.
Приведенный пример на Асме расчитан на бинарные данные, без каких бы то ни было ескейп-символов, характерных для какого-то частного случая. Потому и счётчики.
Цель этого примера - всего лишь показать, что механизм библиотек для примитивных функций не может быть эффективным. Страшно представить себе результат компиляции с языка высокого уровня (просматриваемый дебугом), что реально выполняется, когда происходит конкатенация пары строк. Лазить за каким-то /usr/local/lib/*.so или чуть-чуть нормальных команд. Разница во времени выполнения (скорость) может составлять от 10^3 раз.
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853348
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
Вот более приближенный к жизни вариант, который проглатывает GCC:

#include </usr/include/stdio.h>
char *Table, *User, Query;
int main (int argc, char **argv) {
Table="users"; User="Vasya"; printf("Table=%s\nUser=%s\n",Table,User);
Query=sprintf("select password from %s where login='%s'",Table,User);
printf("Query=%s",Query);
exit(0); }

Но происходит крах во время исполнения:
./strcat
Table=users
User=Vasya
Bus error (core dumped)

Странно то, что в прототипе:
cat /usr/include/stdio.h | grep sprintf
int sprintf(char * __restrict, const char * __restrict, ...);
А ведь int != char , не так ли. Как же всё-таки на Ц записать выражение:
строка2 = строка1 + строка0;
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853633
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это совсем не правильно.
Код: plaintext
1.
char *Table, *User, Query;
Это описаны 2 указателя типа char на непонятный участок памяти и 1 символ.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#include </usr/include/stdio.h>
char Table[ 100 ], User[ 100 ], Query[ 100 ];
int main (int argc, char **argv) {
strcat(Table,"users"); 
strcat(User,"Vasya"); 
printf("Table=%s\nUser=%s\n",Table,User);
sprintf(Query,"select password from %s where login='%s'",Table,User);
printf("Query=%s",Query);
exit( 0 ); }

int sprintf(char * __restrict, const char * __restrict, ...);

Значит, что первый параметр sprintf хочет получить указатель на строку, куда вернет результат, вторым хочет получить константную строку формата, "..." означает любые параметры потом.
int - это не строка, а результат выполнения функции, длина получившейся строки.

Доки:

Учебники по программированию, а так же по C и C++


"Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853785
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
Премного благодарен, буду почитать.
Вопрос простой, но актуальный. Как в Ц называется функция, преобразующая строку в число.
Что-то типа:
uint Conversation_ASCII2UINT(*char);

char Query[100]; unsigned long i; MYSQL_ROW Row;
int main (int argc, char **argv) { goto test;
Row = mysql_fetch_row(Resource); sprintf ( Query,"%d", Row[0]);
test: i=666; printf("i=%d\n",i); sprintf (Query,"%d", i); printf("Query=%s\n",Query);
i=Conversation_ASCII2UINT(Query); printf("i=%d\n",i); exit(0); }
...
Рейтинг: 0 / 0
Нужно переписать фрагмент программы на PHP в C
    #32853789
My
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
My
Гость
Спасибо, уже нашел! На http://lib.ru/CTOTOR/kernigan.txt
i=atoi(Query);
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужно переписать фрагмент программы на PHP в C
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]