Там нет типа string
данных в языке программирования C. Строки в C представлены как array of characters
.
В C char
- тип данных для представления символа. Итак, все, что вам нужно сделать, это объявить array of char data type
для представления строки в C. Каждый элемент в этом массиве будет содержать символ вашей строки.
Кроме того, операторы в C, как ==, !=, +=, +
определены для build-in data types
в C и так, нет перегрузки операторов в C, вы не можете использовать эти операторы с вашим C-String в качестве C-Strings не строить в данном введите язык программирования C.
Примечание: C-Строки на самом деле представляют собой массив символов с символами без символов. Это означает, что последний символ в любой C-String в C будет использоваться для хранения символа Null ('\0')
, который отмечает конец строки.
В файле заголовка <string.h>
есть предопределенные функции, которые можно использовать для работы с C-String (массив символов с символом Null-terminated). Вы можете узнать больше об этом за here.
Таким образом, ваша программа должна выглядеть следующим образом:
#include <stdio.h>
#include <string.h>
#define CSTR_MAX_LEN 100
int main()
{
char uname[CSTR_MAX_LEN+1]; //An extra position to store Null Character if 100 characters are to be stored in it.
char passwd[CSTR_MAX_LEN+1];
printf("Enter your username: ");
scanf("%s", uname);
printf("Enter your password: ");
scanf("%s", passwd);
// Use strcmp to compare values of two strings.
// If strcmp returns zero, the strings are identical
if ((strcmp(uname, "waw") == 0) && (strcmp(passwd, "wow") == 0)){
printf("You have logged in\n");
} else{
printf("Failed, please try again\n");
}
return 0;
}
Помните, что правильный спецификатор формата для обработки C-строки в языке программирования C %s
. Итак, я должен изменить ваш вызов функции scanf()
. Кроме того, я использовал функцию strcmp()
, которая объявлена в заголовочном файле <string.h>
(я включил этот файл заголовка в вышеуказанную программу). Он возвращает числовой нуль, если строки совпадают. Вы можете прочитать об этом выше here.Кроме того, посмотрите на strncmp()
, который является более безопасной версией strcmp()
. Кроме того, помните, что это может привести к undefined behavior
, если вы попытаетесь получить доступ к любому массиву из привязки. Поэтому было бы неплохо включить проверку вашей программы. Как кто-то входит в их ответе вы можете изменить свой вызов scanf()
функцию, чтобы:
scanf("%100s", uname);
Он избегает читать более 100 символов в массиве uname
как он выделяется только для хранения 100 символов (за исключением нулевого символа).
ваших '' uname' и passwd'variables одиночных символов. То, что вы действительно хотите, это массивы символов. – Chris
Ваш вопрос нуждается в заголовке, который отражает то, о чем вы просите. «Как мне с этим справиться?» ничего нам не говорит. –
Также, если вы хотите сравнить строку, вам нужно использовать strcmp (uname, "waw") == 0, not == напрямую, иначе вы сравниваете char (integer) с указателем на массив символов «waw» или «waw», wow " – Rob