$app = Get-WmiObject -Class Win32_Product | Where-Object {
$_.Name -match "Software Name"
}
$app.Uninstall()
Править: Ограбьте нашел другой способ сделать это с параметром Фильтра:
$app = Get-WmiObject -Class Win32_Product `
-Filter "Name = 'Software Name'"
Массив символов - это просто массив символов:
Строка - это класс, который содержит массив символов, но автоматически управляет им за вас. Большинство строковых реализаций имеют встроенный массив из 16 символов (поэтому короткие строки не фрагментируют кучу) и используют кучу для более длинных строк.
Вы можете получить доступ к строковому массиву символов следующим образом:
std::string myString = "Hello World";
const char *myStringChars = myString.c_str();
Строки C ++ могут содержат встроенные символы \ 0, знают их длину без подсчета, работают быстрее, чем массивы символов из кучи для коротких текстов, и защищают вас от переполнения буфера. Кроме того, они более читабельны и проще в использовании.
-
Однако строки C ++ не (очень) подходят для использования через границы DLL, потому что это потребует от любого пользователя такой функции DLL, чтобы убедиться, что он использует тот же самый компилятор и реализация среды выполнения C ++, чтобы он не рисковал, что его строковый класс будет вести себя иначе.
Обычно строковый класс также освобождает свою память кучи в вызывающей куче, поэтому он сможет снова освободить память, только если вы используете общую (.dll или .so) версию среды выполнения.
Вкратце: используйте строки C ++ во всех ваших внутренних функциях и методах. Если вы когда-нибудь пишете .dll или .so, используйте строки C в своих публичных (dll / so-visible) функциях.
Аркаитц прав, что строка
- управляемый тип. Для вас это означает, что вам не нужно беспокоиться о длине строки, а также об освобождении или перераспределении памяти строки.
С другой стороны, Нотация char []
в приведенном выше случае ограничила символьный буфер ровно 256 символами. Если вы попытались записать в этот буфер более 256 символов, в лучшем случае вы перезапишете другую память, которой «владеет» ваша программа. В худшем случае вы попытаетесь перезаписать память, которой вы не владеете, и ваша ОС сразу же убьет вашу программу.
Итог? Строки намного удобнее для программистов,
Я лично не вижу причин, по которым можно было бы использовать char * или char [], за исключением совместимости со старым кодом. std :: string не медленнее, чем использование c-строки, за исключением того, что он будет обрабатывать перераспределение для вас. Вы можете установить его размер при создании и, таким образом, избежать перераспределения, если хотите. Его оператор индексации ([]) обеспечивает постоянный доступ по времени (и во всех смыслах этого слова то же самое, что и использование индексатора c-строк). Использование метода at также дает вам проверенные границы безопасности, чего вы не получите с c-строками, если вы не напишете его. Ваш компилятор чаще всего оптимизирует использование индексатора в режиме выпуска. С до-струнами легко возиться; такие вещи, как delete vs delete [], безопасность исключений, даже как перераспределить c-строку.
Ну, строковый тип - это полностью управляемый класс для символьных строк, в то время как char [] по-прежнему тот же, что и в C, байтовый массив, представляющий для вас символьную строку.
В терминах API и стандартной библиотеки все реализовано в терминах строк, а не char [], но есть еще много функций из libc, которые получают char [], поэтому вам может потребоваться использовать его для них, кроме этого я всегда буду использовать std :: string.
С точки зрения эффективности, конечно, необработанный буфер неуправляемой памяти почти всегда будет быстрее для многих вещей, но примите во внимание сравнение строк, например, std :: string всегда имеет размер для проверки сначала, а с char [] вам нужно сравнивать символ за символом.