c - 'N'字符出现在字符串的末尾

标签 c string scanf

我是 C 语言的新手,在尝试输入字符串时我遇到了一个问题。更具体地说,当打印字符串时,字符“N”出现在它的末尾,因此,我无法测量字符的确切数量。这是我的代码:

int main()
{
    int j = 0;
    char c[15];
    printf("Give surname: ");
    scanf(" %s", c);
    for (int i = 0; i<sizeof(c) / sizeof(c[1]); i++)
    {
        if (isalpha(c[i]))
        {
            printf("%c ", c[i]);
            j++;
        }
    }
    printf("\nNumber of characters: %d", j);

    return 0;
}

例如:如果输入是“john”,那么我会得到以下输出:

enter image description here

我做错了什么?

最佳答案

那是因为您在比实际字符串长的字符数组上使用了 sizeof 运算符。 您可以如上所述使用 string.h 中的 strlen,或者简单地遍历字符直到 \0,就像这样:

char * p = c;
while(*p++)
    if (isalpha(*p))
        printf("%c ", *p);

如果您对字符数感兴趣,您可以只减去指针。

关于c - 'N'字符出现在字符串的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131764/

相关文章:

c - 是否可以将函数参数存储在函数指针中?

c - 在没有安全协议(protocol)的网页上使用curl

c - Hello world 程序在 main 中出现 void 错误

C# 将动态字符串转换为现有类

c# - 如何从字符串中删除字符组合?

c - 我正在尝试在一个函数内执行 scanf 并将其输出到另一个函数。目前它无法正确输出。我不确定我错过了什么

java - 在 Windows : Get unbuffered stdout from C program into Java program InputStream [Now with minimal example! ]

objective-c - NSArray 的字符串排序问题

c++ - "swscanf"直到 $ 符号才解析字符串

c - 如何在C语言中的for循环中使用scanf作为条件