比较C中的字符串数组

时间:2014-03-14 06:03:26

标签: c string

这是代码:

#include <stdio.h>


int main(void)
{
    char words[256];
    char filename[64];
    int count = 0;

    printf("Enter the file name: ");
    scanf("%s", filename);

    FILE *fileptr;
    fileptr = fopen(filename, "r");

    if(fileptr == NULL)
        printf("File not found!\n");

    while ((fscanf(fileptr, " %s ", words))> 0)
    {
        if (words==' ' || words == '\n')
        count++;
    }

    printf("%s contains %d words.\n", filename, count);

    return 0;

}

我一直收到这个错误:

warning: comparison between pointer and integer [enabled by default]
         if (words==' ' || words == '\n')
                  ^


我改变后,words转到*words但我没有收到错误,但这并没有给我正确的结果。我正在尝试计算文件中的单词数。

5 个答案:

答案 0 :(得分:1)

单词是char指针,而' '是char,*单词等于单词[0] 通常我们会在下面定义一个新指针

char *p =  words;
while(*p != '\0' )
{
  // using *p something you need to do 
  p++;
}

答案 1 :(得分:1)

无需进行比较,因为%swords)不包含空格(例如' ''\n')。

试试这个

while (fscanf(fileptr, "%s", words)> 0) {
    count++;
}

答案 2 :(得分:0)

C中没有string。每个字符串(/ literal)都是一个字符数组。使用strcmp

答案 3 :(得分:0)

注意使用数组名称单词本身意味着指向数组中第一个元素的指针。如果您需要比较C中的2个字符串,那么 strcmp 就是您要找的。

答案 4 :(得分:0)

您无法比较C中的字符串。您应该使用标准库函数strcmp逐个字符地比较它们。这是它的原型包含在string.h标题中。

int strcmp(const char *s1, const char *s2);    

strcmp函数会比较两个字符串s1s2。如果找到s1,则返回小于,等于或大于零的整数,小于,匹配或大于s2

fscanf " %s "的格式字符串(注意尾随和前导空格)将读取并丢弃任何数量的空格,无论如何都使用格式字符串"%s"。这意味着words不会将空格写入缓冲区fscanffscanf将只在words中写入非空白字符,并在遇到空格时返回。因此,要计算单词数量,只需为每次成功的fscanf调用增加计数器。

此外,您的程序应检查scanffscanf调用中是否存在缓冲区溢出。如果输入字符串对于缓冲区来说太大,那么这将导致未定义的行为,甚至由于段错误而导致崩溃。您可以通过更改格式字符串来防范它。 scanf("%63s", filename);表示scanf将从stdin读取,直到遇到空格并在缓冲区63中写入大多数filename个非空格字符,然后在其中添加一个终止空字节结束。

#include <stdio.h>
#include <string.h>

int main(void) {
    // assuming max word length is 256
    // +1 for the terminating null byte added by scanf
    char words[256 + 1]; 

    // assuming max file name length is 64
    // +1 for the terminating null byte 
    char filename[64 + 1]; 

    int count = 0;        // counter for number of words

    printf("Enter the file name: ");
    scanf("%64s", filename);

    FILE *fileptr;
    fileptr = fopen(filename, "r");

    if(fileptr == NULL)
        printf("File not found!\n");

    while((fscanf(fileptr, "%256s", words)) == 1)
        count++;

    printf("%s contains %d words.\n", filename, count);
    return 0;

}