Почему вывод этой программы всегда:
example
example
Если я заменю первую строку на вторую в цикле for, то вывод будет выглядеть так:
EXAMPLE
EXAMPLE
Что я делаю не так?
string key = "EXAmple";
string ukey = key;
string lkey = key;
for (int i = 0; i < strlen(key); i++)
{
ukey[i] = toupper(key[i]);
lkey[i] = tolower(key[i]);
}
printf("%s\n", ukey);
printf("%s\n", lkey);
2 ответа
Определение string
, скорее всего, будет char*
. Следовательно, key
, ukey
и lkey
на самом деле являются указателями, указывающими на одну и ту же память; они просто псевдонимы для одного и того же.
Здесь ukey
и lkey
, скорее всего, являются указателями на один и тот же массив в памяти. В C ссылка на массив — это просто указатель на первый элемент в массиве, а использование оператора [] просто возвращает значения в каждой позиции массива (разыменованные).
Итак, ukey и lkey относятся к одним и тем же символам.
Похоже, вы хотите использовать strcpy()
вместо обычного присваивания или эквивалент для вашего пользовательского типа string
.
Или используйте C++ и его строковый тип.
string
, нет?
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.
string
не является определенным термином в C. Таким образом, ответ будет зависеть от того, как он был определен.string
. Этоchar *
?typedef char* string;
? Или еще хуже,#define string char*
? Это может быть файл заголовка, который вы#include
.#include <string.h>
в заголовке. Я нуб-программист и не знаю, как ответить на ваши вопросы.