51Testing软件测试论坛

标题: C小问题! [打印本页]

作者: lhjtc8257    时间: 2007-7-25 22:08
标题: 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
回车也会被认为是字符读入,所以一起打出了
作者: keenling    时间: 2007-7-25 22:12
补充问题:如何计算一个未定义的数组,在添加元素后的数组长度(或则怎么计算一个数组里的字符长度)
LZ问得不够明确,什么叫未定义?是没有声明还是没有初始化?如果要自算长度,字符串本来就提供函数的,仅限于字符串
作者: lhjtc8257    时间: 2007-7-25 22:19
不好意思没说清楚!
定义一个数组(不定长度的) char string[]={};
向数组内输入内容:abcdef
如何求数组的长度?
作者: Jor    时间: 2007-7-25 22:24
用Strlength(s)返回长度 sizeof应该也可以
作者: keenling    时间: 2007-7-25 22:25
这个数组就是一个字符串,C语言中字符串都是存在一个字符数组中的,也就是char的数组,直接可以用C提供的函数查长度,具体哪个记不清,好像是什么strlength的,LZ可以查下资料。
实在不行也可以自己写一个,因为字符串都是以'\0'结尾的,可以用个循环,设置个信号量判断。
作者: keenling    时间: 2007-7-25 22:31
5楼那两个方法都可以,不过第一个函数好像只能用在字符串上,也就是char型数组上。第二个函数对任何的变量都能用,包括结构体,不过计算字符串可能要减一,因为最后有'\0',LZ可以试试看。
其实5楼我认识他,sdlkfj6
作者: Jor    时间: 2007-7-25 22:35
StrLength需要包含string.h头文件 似乎。。。。。。
作者: keenling    时间: 2007-7-25 22:36
是的,我敢肯定

PS:其实8楼的,我认识他
作者: lhjtc8257    时间: 2007-7-25 22:41
Strlength(s)如何使用的啊,是不是要使用什么头文件啊!(显示未定义)

#include <stdio.h>
main()
{
    int j,k;
    char i[]={};
    for (j=0;j<=6;j++)
    {
        scanf("%c",&i[j]);
    }
    printf("%s\n",i);
    k=sizeof(i);
    printf("%d\n",k-1);
}
显示-1,请指教怎么会事
作者: keenling    时间: 2007-7-25 22:42
include <string.h>
作者: lhjtc8257    时间: 2007-7-25 22:51
写了#include <string.h>头文件,也报错

还有个问题,我想求的数组内字符的实际长度(可以实现吗)
比如
#include <stdio.h>
main()
{
    int j,k;
    char i[10]="abcde";
    printf("%s\n",i);
    k=sizeof(i);
    printf("%d\n",k-1);
}
显示9个(最后一个是\0)
我想显示的是5(只有abcde)
作者: keenling    时间: 2007-7-25 22:54
sizeof()的含义是计算这个变量占据内存的字节数,你声明的时候就是10个,所以他返回10个,减去1就是9个,这里不是因为'\0'的原因,要求实际长度,可以试试strlength
作者: Jor    时间: 2007-7-25 23:02
在C++里面是Strlen()
作者: keenling    时间: 2007-7-25 23:03
LZ!注意,我们告诉你的那个strlength可能不是C语言的,正确的可能是strlen,要<string.h>,由于语言太多记不清,引起混淆了,你用strlen试试看,刚才我在VC 6.0里调通了。
作者: keenling    时间: 2007-7-25 23:04
他怎么又比我快一步?!
作者: lhjtc8257    时间: 2007-7-25 23:30
能否把你调好的给我看看啊,学习下sdlkfj2
作者: keenling    时间: 2007-7-25 23:35
我的是VC++ 6.0环境下的,库和你用的可能不一样:
#include "stdafx.h"
#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        int k;
    char i[10]="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[10]="ad";
    printf("%s\n",i);
        k=strlen(i);

    printf("%d\n",k);
}
作者: lhjtc8257    时间: 2007-7-25 23:53
谢谢,今天长知识了sdlkfj2
作者: seifer1754    时间: 2007-7-26 01:29
#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[10]="adcd";

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

    k=len(array);

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




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2