weixin_54910555 2024-01-13 14:55 采纳率: 20%
浏览 10

c语言复制部分字符串

c语言复制部分字符串

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    char arr[40]="";
    scanf("%s",arr);
    getchar();
    scanf("%d",&n);
    for(int i=n;i<=strlen(arr);i++)
    {
        printf("%c",arr[i-1]);
    }
    return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    char arr[40]="";
    scanf("%s",arr);
    getchar();
    scanf("%d",&n);
    for(int i=n-1;i<=strlen(arr);i++)
    {
        printf("%c",arr[i]);
    }
    return 0;
}

其中第一份代码是在循环printf("%c",arr[i-1])里减1,执行成功,第2份for(int i=n-1;在循环条件上减1执行报错,但打印的输出都是相同,这是为什么

  • 写回答

2条回答 默认 最新

  • K_n_i_g_h_t_1990 2024-01-13 14:57
    关注

    第一份代码会打印出从第 n 个字符开始的字符串,而第二份代码会打印出从第 n-1 个字符开始的字符串。例如,如果输入的字符串是 “hello”,而 n 是 3,那么第一份代码会输出 “llo”,而第二份代码会输出 “ello”。

    第二份代码之所以会报错,是因为你的循环条件是 i <= strlen(arr),而 strlen(arr) 返回的是字符串的长度,不包括结束符 ‘\0’。当 i 等于 strlen(arr) 时,arr[i] 就是 ‘\0’,而 printf(“%c”,arr[i]) 会尝试打印一个空字符,这是不合法的。你可以把循环条件改为 i < strlen(arr),或者 i <= strlen(arr) - 1,就可以避免这个错误

    评论

报告相同问题?

问题事件

  • 创建了问题 1月13日