#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
int n, i, check=0;
char first_name[20];
char current_name[20];
printf("Enter n, followed by n last names (each last name must be a single word):");
scanf("%d", &n);
scanf("%s", &first_name[20]);
for (i=1; i<n; i++){
scanf("%s", ¤t_name[20]);
if ( strcmp(first_name[20], current_name[20])==0)
check = 1;
}
if (check == 1)
printf("First name in list is repeated.");
else
printf("First name in list is not repeated.");
system("pause");
return 0;
}
我正在使用Dev C ++,我得到的错误是:
23:9 [警告]传递'strcmp'的参数1使整数指针没有强制转换[默认情况下启用]
程序运行,但在我输入几个名字后崩溃了。
答案 0 :(得分:2)
strcmp(first_name[20], current_name[20])==0)
对于
而言,使用strcmp(first_name,current_name)
也是无效的
scanf("%s", &first_name[20]);
改为使用scanf("%s",first_name)
。
答案 1 :(得分:0)
您没有正确使用strcmp()
。将char []
传递给函数时,只需使用其名称即可。
所以你需要解决以下问题:
更改
if ( strcmp(first_name[20], current_name[20])==0)
到
if ( strcmp(first_name, current_name) )
更改
scanf("%s", &first_name[20]);
...
scanf("%s", ¤t_name[20]);
到
scanf("%s", first_name);
...
scanf("%s", current_name);
答案 2 :(得分:0)
如果您只想使用一个字符串,这里的其他答案将有所帮助。如果您想要使用字符串数组,就像您在循环中打印的输出一样,那么您应该声明一个字符串数组而不是单个字符串。
char first_name[20];
声明一个chars数组(如果这些字符中的任何一个是NUL,则为单个字符串)。您似乎想要使用字符串数组,因此您需要一个二维数组的字符(或每个字符串的char指针和malloc数组):
char first_name[20][MAX_NAME_LENGTH];
其中MAX_NAME_LENGTH
定义如上:
#define MAX_NAME_LENGTH 64
然后你就能做到这样的事情:
strcmp(first_name[i], current_name[i])
由于first_name[i]
会衰减为char *
。
答案 3 :(得分:0)
在c / c ++中,字符串只是一个char数组。 要访问数组元素,请使用指针。要从头开始访问字符串,您必须提供指向字符串开头的指针。
Strcmp和scanf将指针指向char数组(因此,字符串):
int strcmp ( const char * str1, const char * str2 );
int scanf ( const char * format, ... );
他们需要指向字符串开头的指针。你可以写:
scanf("%s", first_name);
strcmp(first_name, current_name) == 0
或
scanf("%s", &first_name[0]);
strcmp(&first_name[0], ¤t_name[0]) == 0