-1

我编写了这段代码来区分空格和换行符,以便我可以根据用户输入计算整个文本的长度。我实际上需要计算文本的长度,以便我可以在链表中为该长度分配空间。

char s[24];
int l=0,i;
scanf("%s",s);
for(i=0;;){
    if(s[i]==' ') {
     l++;
     i++;
    }
    else if (s[i]=='\0') break;
    else {
    l++;
    i++;
    }
}

printf("%d",l);
4

2 回答 2

1

你可以用一段非常喊的代码来完成它,其中包含一些功能:

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

int main(void)
{
    char s[24];
    fgets(s,24,stdin);
    if( s[strlen(s)-1] == '\n'){
        s[strlen(s)-1] = '\0';
    }
    printf("%lu\n",strlen(s));
    return 0;
}

你不应该使用scanf。因为与空间相遇,它停止了。而且使用scanf()是不安全的。fgets() 是一个更好的选择。

经 GCC 和 Linux 测试。

更新:感谢@wildplasser,我的代码中有一个错误。修复 bug 后,没有 string.h 的新代码是:

#include <stdio.h>

size_t my_strlen(char * str){
    size_t length = 0;
    while( str[length++] != '\0' ){;}
    return length-1;
}

int main(void)
{
    char s[24];
    size_t len=0;
    if( fgets(s,24,stdin) == NULL ){
        printf("Error in reading string.\n");
        return -1;
    }
    len = my_strlen(s);
    if( len > 0 && s[len-1] == '\n'){
        --len;
    }
    printf("%zd\n",len);
    return 0;
}
于 2013-04-03T21:34:02.197 回答
0

Per the question in your title, <string.h> has a strlen() function that will count the number of characters up to the null terminator in a string. It looks like you may be doing something different in your code, though.

于 2013-04-03T21:24:55.090 回答