使用strlen和函数查找字符串长度。用空字符串打印

时间:2016-02-21 09:49:48

标签: c

所以我正在编写这段代码来打印我输入的任何字符串的字符串长度,我基本上已经使用了代码,但是我遇到了麻烦,因为当我输入一个空白字符串时,我的程序没有正确打印到屏幕。它适用于空格(空格键)和所有其他字符串,但我必须能够输入空字符串。我们应该使用类似的东西:  buf [strlen(buf) - 1] =' \ 0&#39 ;; 输入和打印空字符串, 但我不确定如何正确输入代码。任何想法??

这是我的计划:

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

int *MyStrlen(const char *string2);

int main()
{
char string2[100];

printf("Enter a string: \n");
scanf("%100[^\n]",&string2);

int  length, length2;

length =  strlen(string2);
length2 = MyStrlen(string2);

printf("strlen(''%s'') returned %d\n", &string2, length);
printf("MyStrlen(''%s'') returned %d\n", &string2, length2);

return 0;
}

另外,这里是MyStrlen函数,除了输入空字符串外,所有工作正常。

int *MyStrlen(const char *string2)
{
int stringcount=0;

while (string2[stringcount]!='\0')
{
    stringcount++;
}
return stringcount;
}

2 个答案:

答案 0 :(得分:3)

也许可以通过以下方式解决问题:

'\0'之前将string2的第一个元素初始化为scanf

string2[0] = '\0';

int *MyStrlen(...)的返回类型更改为int

int MyStrlen(const char *string2);

正如这篇文章:How to input a string using scanf in c including whitespaces, 更安全的方法是指定小于1 string2缓冲区的大小:

scanf("%99[^\r\n]", &string2[0]);

查看scanf man page了解详情。

代码:

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

int MyStrlen(const char *string2);

// change the return type to int
int MyStrlen(const char *string2)
{
    int stringcount=0;

    while (string2[stringcount] != '\0')
        stringcount++;
    return stringcount;
}
int main()
{
    char string2[100];

    // Initialize the first element to 0
    string2[0] = '\0';
    printf("Enter a string: \n");

    scanf("%99[^\r\n]", &string2[0]);

    int  length, length2;


    length =  strlen(string2);
    length2 = MyStrlen(string2);

    // Change to &string2 to string2
    printf("strlen(''%s'') returned %d\n", string2, length);
    printf("MyStrlen(''%s'') returned %d\n", string2, length2);

    return 0;
}

带空字符串的输出:

Enter a string:

strlen('''') returned 0
MyStrlen('''') returned 0

带有“aaa”的输出:

Enter a string:
aaa
strlen(''aaa'') returned 3
MyStrlen(''aaa'') returned 3

答案 1 :(得分:-1)

嗯,问题在于

scanf("%100[^\n]",&string2);

将其更改为

fgets (string2, 100, stdin);

因为scanf无法读取空白字符串。

另外,正如@ M.M的评论所述,检查&#39; \ n&#39;:

int last = strlen (string2) -1;
if (string2 [last] = '\n') {
   string2 [last] = '\0';
}

enter image description here

在第二种情况下,我输入了一个空白字符串。

完全更正的代码:

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

int *MyStrlen(const char *string2);

// change the rerturn type to int
int *MyStrlen(const char *string2)
{
    int stringcount=0;

    while (string2[stringcount] != '\0')
        stringcount++;
    return stringcount;
}
int main()
{
    char string2[100];

    // Initialize the first element to 0
    string2[0] = '\0';
    printf("Enter a string: \n");
    fgets (string2, 100, stdin);
    int  length, length2;
    int last = strlen (string2) -1;
    if (string2 [last] = '\n') {
       string2 [last] = '\0';
    }


    length =  strlen(string2);
    length2 = MyStrlen(string2);

    printf("strlen(''%s'') returned %d\n", string2, length);
    printf("MyStrlen(''%s'') returned %d\n", string2, length2);

    return 0;
}

同样如@Gomiero的回答中所述,将字符串初始化为\0