gpt4 book ai didi

C程序在不使用库函数的情况下将一个字符串复制到另一个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:27 24 4
gpt4 key购买 nike

下面有一个程序,它只是将用户输入的字符串复制到另一个字符串中。该程序对某些输入工作正常,但对某些大字符串输入显示异常。我无法弄清楚。

#include<stdio.h>
int main()
{
int i, j;
char s1[100], s2[100];
printf("Enter a string : \n");
scanf("%[^\n]%*c", s1);
for(i=0; s1[i] != '\0'; i++)
{
s2[i] = s1[i];
}
printf("\n the original string is %s\n", s1);
printf("\n the string after copying is %s\n", s2);
return 0;
}

很少有输入实例是:-

amitwebhero@AmitKali:~/c programs$ ./a.out
Enter a string :
hi there..!!

the original string is hi there..!!

the string after copying is hi there..!!

此处程序运行良好,但考虑到以下情况,它会在字符串末尾添加两个额外的垃圾值。

amitwebhero@AmitKali:~/c programs$ ./a.out
Enter a string :
my name is amit upadhyay

the original string is my name is amit upadhyay

the string after copying is my name is amit upadhyay�.�4

最佳答案

C 字符串需要以 null 结尾。也就是说,它们在末尾需要一个 '\0' 字符,因此常见的字符串表达式可以告诉字符串在哪里结束。像 strcpyprintf("%s... 这样的字符串函数在它们的操作中寻找这个空终止。当你这样做时:

for(i=0; s1[i] != '\0'; i++)
s2[i] = s1[i];

您未能复制空终止符。这意味着当您打印字符串时,printf 将遍历该字符串,直到它在您的字符串末尾后某处找到第一个 '\0' 字符。这就是您看到额外字符的原因,如果 NULL 在字符串分配的内存之外,您实际上会通过访问未分配的空间导致未定义的行为,这是非常非常糟糕的。

您需要通过添加以下内容来终止您的字符串:

s2[i] = '\0'

在你的 for 循环之后。或者更好的是,使用标准的 c 函数 strcpy .

关于C程序在不使用库函数的情况下将一个字符串复制到另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33879839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com