回 帖 发 新 帖 刷新版面

主题:请高手帮个忙,看看我这纠结我半天的几个简单的问题

[color=008000]//改错题[/color]#include<stdio.h>

// 1.这个运行不出结果
#include<stdio.h>
#include<string.h>
main()
{
    int i;
    char string[10],str1[10];
    for(i=0;i<10;i++)
        str1[i]='A';
    strcpy(string, str1);
    printf("%s\n%c\n",string,str1[3]);
}


// 2.这个运行正常,但是资料上说这样会数据越界,求解释?
    
#include<stdio.h>
main()
{
    char string[10];
    char* str1="0123456789";
    strcpy(string, str1);
    printf("%s\n",string);
}

// 3.这个好像没什么问题,请问大侠们,错误在哪里?
#include<stdio.h>
#include<string.h>
main()
{
    char string[10], str1[100];
    gets(str1);
    if(strlen(str1)<=10)
    {
        strcpy(string, str1);
    }
    printf("%s\n",string);
}    

回复列表 (共2个回复)

沙发

1、strcpy的第二个参数(也就是用于拷贝的原始字符串)需要以'\0'作为结尾。但是你的str1数组中,十个元素全部都是'A',没有'\0',所以不行。
2、会越界,因为"0123456789"总共10个字符,加上结尾的'\0',需要占用11个char的空间,但是你的string数组只有10个char的空间,差了一点点。
3、跟2一样。strlen(str1)等于10的时候,需要11个char的空间。修改为strlen(str1) < 10这样就可以。

板凳


非常感谢!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册