ShellExecute возвращает 0x00000002 [дубликат]

ответы немного неполные, 3 вещи, которые вы должны сделать

в php.ini вашей установки php (обратите внимание: в зависимости от того, хотите ли вы это для CLI, apache или nginx, найти правильное php.ini для управления. Для nginx он обычно находится в /etc/php/7.1/fpm, где 7.1 зависит от вашей версии. Обычно для apache /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

или для установки других значений. Перезапустите / перезагрузите apache, если у вас установлен apache или php-fpm для nginx, если вы используете nginx.

5
задан bames53 27 August 2012 в 17:53
поделиться

2 ответа

Xcode выплевывает это предупреждение, потому что он интерпретирует \s в «a \ sb» как escape-последовательность, но \s не является допустимой escape-последовательностью. Он заменяется только на s, поэтому строка становится «asb».

Сброс обратной косой черты, такой как "a\\sb", является правильным решением. Если это как-то не сработало для вас, напишите более подробную информацию об этом.

Вот пример.

#include <iostream>
#include <string>

int main() {
    std::string a = "a\\sb";
    std::cout << a.size() << ' ' << a << '\n';
}

Выход этой программы выглядит так:

4 a\sb [/g0]

Если у вас есть другой выход, отправьте его.


Regexs может быть болью на C ++, потому что обратные слэши должны быть экранированы таким образом. C ++ 11 имеет необработанные строки, которые не допускают какого-либо экранирования, так что избежать обратного слэша не нужно: R"(a\sb)".

7
ответ дан bames53 1 September 2018 в 07:43
поделиться
bool stringMatch(const char *expr, const char *str) {   
   // do something to compare *(expr+i) == '\\'  
   // In this case it is comparing against a backslash
   // i is some integer
}

int main() {
    string a = "a\\sb";
    string b = "a b";
    cout << stringMatch(a.c_str(), b.c_str()) << endl;
    return 1;
}

C и C ++ обрабатывают обратную косую черту как escape-последовательности по умолчанию. Вы должны сказать C, чтобы не использовать вашу обратную косую черту как escape-последовательность, добавляя дополнительную обратную косую черту к вашей строке.

Это общие escape-последовательности:

  • \ a - Bell (beep)
  • \ b - Backspace
  • \ f - Formfeed
  • \n - Новая строка
  • \r - Возврат каретки
  • \ t - Горизонтальная вкладка
  • \\ - Обратная сляка
  • \ '- Одиночная марка котирования
  • \ "- Двойной знак четности
  • \ ooo - Октальное представление
  • \ xdd - Шестнадцатеричное представление

EDIT: Xcode ведет себя ненормально на вашей машине. Поэтому я могу предложить вам это .

bool stringMatch(const char *expr, const char *str) {   
   // do something to compare *(expr+i) == '\\'  
   // In this case it is comparing against a backslash
   // i is some integer
}

int main() {
    string a = "a" "\x5C" "sb";
    string b = "a b";
    cout << stringMatch(a.c_str(), b.c_str()) << endl;
    return 1;
}

Не беспокойтесь о пробелах в объявлении string a, Xcode объединяет строки, разделенные пробелом.

EDIT 2: Действительно, Xcode читает ваш "a\\b" в буквальном смысле, это то, как он имеет дело с экранированными обратными косыми чертами. Когда вы выведете string a = "a\\sb" на консоль, вы увидите a\sb. Но когда вы передадите string a между методами в качестве аргумента или как частный член, тогда это займет дополнительный обратный слэш lite ралли. Вы должны разработать свой код с учетом этого факта, чтобы он игнорировал дополнительную обратную косую черту.

РЕДАКТИРОВАТЬ 3: Edit 1 - ваш оптимальный ответ здесь, но вот еще один.

Добавить код в ваш метод stringMatch() для замены двойная обратная косая черта с одиночной обратной косой чертой.

Вам просто нужно добавить эту дополнительную строку в самом начале функции:

expr=[expr stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"];

Это должно решить проблему двойной обратной косой черты.

РЕДАКТИРОВАТЬ 4: Некоторые люди считают, что Edit 3 является ObjectiveC и, следовательно, не является оптимальным, поэтому другой вариант в ObjectiveC ++.

void searchAndReplace(std::string& value, std::string const& search,std::string const& replace)
{
    std::string::size_type  next;

    for(next = value.find(search);        // Try and find the first match
        next != std::string::npos;        // next is npos if nothing was found
        next = value.find(search,next)    // search for the next match starting after
                                          // the last match that was found.
       )
    {
        // Inside the loop. So we found a match.
        value.replace(next,search.length(),replace);   // Do the replacement.
        next += replace.length();                      // Move to just after the replace
                                                       // This is the point were we start
                                                       // the next search from. 
    }
}

РЕДАКТИРОВАТЬ 5: Если вы измените const char * в stringMatch() для «string» он будет менее сложным для вас.

expr.replace(/*size_t*/ pos1, /*size_t*/ n1, /*const string&*/ str );

PS Теперь у вас есть все ответы, поэтому вам нужно, что вы реализуете, что дает вам наилучшие результаты.

12
ответ дан Derpy Derp 1 September 2018 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: