lhjtc8257 发表于 2007-7-25 22:08:04

C小问题!

#include <stdio.h>
main()
{
    int i;
    char string[]={};
    for (i=0;i<=4;i++)
    {
      scanf("%c",&string);
    }
    printf("%s\n",string);
}
实现效果是输入5个字符后,输出这5个字符

执行有两中情况?(←代表回车)
1)a←
   b←
   c←
还没等我输输入第四个值,已经输出结果了
   a
   b
   c

2)abcde←
返回abcde(正常)

补充问题:如何计算一个未定义长度的数组,在添加元素后的数组长度(或则怎么计算一个数组里的字符长度)

[ 本帖最后由 lhjtc8257 于 2007-7-25 22:16 编辑 ]

keenling 发表于 2007-7-25 22:10:32

回车也会被认为是字符读入,所以一起打出了

keenling 发表于 2007-7-25 22:12:53

补充问题:如何计算一个未定义的数组,在添加元素后的数组长度(或则怎么计算一个数组里的字符长度)
LZ问得不够明确,什么叫未定义?是没有声明还是没有初始化?如果要自算长度,字符串本来就提供函数的,仅限于字符串

lhjtc8257 发表于 2007-7-25 22:19:57

不好意思没说清楚!
定义一个数组(不定长度的) char string[]={};
向数组内输入内容:abcdef
如何求数组的长度?

Jor 发表于 2007-7-25 22:24:36

用Strlength(s)返回长度 sizeof应该也可以

keenling 发表于 2007-7-25 22:25:36

这个数组就是一个字符串,C语言中字符串都是存在一个字符数组中的,也就是char的数组,直接可以用C提供的函数查长度,具体哪个记不清,好像是什么strlength的,LZ可以查下资料。
实在不行也可以自己写一个,因为字符串都是以'\0'结尾的,可以用个循环,设置个信号量判断。

keenling 发表于 2007-7-25 22:31:00

5楼那两个方法都可以,不过第一个函数好像只能用在字符串上,也就是char型数组上。第二个函数对任何的变量都能用,包括结构体,不过计算字符串可能要减一,因为最后有'\0',LZ可以试试看。
其实5楼我认识他,sdlkfj6

Jor 发表于 2007-7-25 22:35:25

StrLength需要包含string.h头文件 似乎。。。。。。

keenling 发表于 2007-7-25 22:36:34

是的,我敢肯定

PS:其实8楼的,我认识他

lhjtc8257 发表于 2007-7-25 22:41:06

Strlength(s)如何使用的啊,是不是要使用什么头文件啊!(显示未定义)

#include <stdio.h>
main()
{
    int j,k;
    char i[]={};
    for (j=0;j<=6;j++)
    {
      scanf("%c",&i);
    }
    printf("%s\n",i);
    k=sizeof(i);
    printf("%d\n",k-1);
}
显示-1,请指教怎么会事

keenling 发表于 2007-7-25 22:42:44

include <string.h>

lhjtc8257 发表于 2007-7-25 22:51:12

写了#include <string.h>头文件,也报错

还有个问题,我想求的数组内字符的实际长度(可以实现吗)
比如
#include <stdio.h>
main()
{
    int j,k;
    char i="abcde";
    printf("%s\n",i);
    k=sizeof(i);
    printf("%d\n",k-1);
}
显示9个(最后一个是\0)
我想显示的是5(只有abcde)

keenling 发表于 2007-7-25 22:54:08

sizeof()的含义是计算这个变量占据内存的字节数,你声明的时候就是10个,所以他返回10个,减去1就是9个,这里不是因为'\0'的原因,要求实际长度,可以试试strlength

Jor 发表于 2007-7-25 23:02:07

在C++里面是Strlen()

keenling 发表于 2007-7-25 23:03:44

LZ!注意,我们告诉你的那个strlength可能不是C语言的,正确的可能是strlen,要<string.h>,由于语言太多记不清,引起混淆了,你用strlen试试看,刚才我在VC 6.0里调通了。

keenling 发表于 2007-7-25 23:04:21

他怎么又比我快一步?!

lhjtc8257 发表于 2007-7-25 23:30:08

能否把你调好的给我看看啊,学习下sdlkfj2

keenling 发表于 2007-7-25 23:35:29

我的是VC++ 6.0环境下的,库和你用的可能不一样:
#include "stdafx.h"
#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        int k;
    char i="ad";
    printf("%s\n",i);
        k=strlen(i);

    printf("%d\n",k);
        return 0;
}
如果你用的是标准C,用这个试试看:

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

main()
{
        int k;
    char i="ad";
    printf("%s\n",i);
        k=strlen(i);

    printf("%d\n",k);
}

lhjtc8257 发表于 2007-7-25 23:53:37

谢谢,今天长知识了sdlkfj2

seifer1754 发表于 2007-7-26 01:29:50

#include <stdio.h>

int len(char *str)
{
        char *s;
        s = str;
        int count = 0;

        while(*s != '\0')
        {
                *s++;
                count++;
        }

        return (count);

}

void main()
{
        int k;
        char array="adcd";

    printf("%s\n",array);

    k=len(array);

    printf("%d\n",k);
}
页: [1]
查看完整版本: C小问题!