当前位置:   article > 正文

牛客 题库 1_strcpy str1 str2长度相等会有问题吗

strcpy str1 str2长度相等会有问题吗

1.字符串复制函数strcpy (字符数组1, 字符数组2),字符数组1的长度应大于等于字符数组2的长度.  说法是否正确?

解答:说法正确

strcpy函数:顾名思义字符串复制函数:

原型声明:char *strcpy(char* dest, const char *src);
头文件:#include < string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的 地址空间,返回dest(地址中存储的为复制后的新值)。
说明: src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串
返回指向dest的 指针
该函数的参数是字符指针,也就是可以是字符串变量和字符数组,因为它们的变量名代表首字符地址字符串默认有一个null
结束符 字符数组没有(也就是说,字符串的末尾都有一个\0,而字符数组没有)。所以此处需要注意:因为src要求有null
结束符,所以字符数 组的长度必须大于等于src包含null结束符的总长度。 例如,char* src="abcd"; char dest[5]; 这里
dest的长度就至少为5。
strncpy函数:多个n代表可以指定字符个数进行赋值。原型:char * strncpy(char *dest, char *src, size_tn); 

功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符

才开始复制),返回指向dest的指针。

要求:如果n > dest串长度,dest栈空间溢出产生崩溃异常。该函数注意的地方和strcpy类似。

(c/c++)复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_tn的值决定。如果src的前n个字符

不含NULL字符,则结果不会以NULL字符结束。如果n<src的长度,只是将src的前n个字符复制到dest的前n个字符,不自动添

加'\0',也就是结果dest不包括'\0',需要再手动添加一个'\0'。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字

节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+'\0'。举例:


  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. int main()
  5. {
  6. char str1[9];
  7. char* str2 = "abcdef";
  8. char str3[9];
  9. strcpy(str1, str2);
  10. strncpy(str3, str2, 4);
  11. str3[4] = '\0';//没有会乱码
  12. cout << str1 << endl;
  13. cout << str3 << endl;
  14. return 0;
  15. }

如果在复制完的str3的后面不添加'\0',会出现乱码的情况。


2.

  1. 链接:https://www.nowcoder.com/questionTerminal/b3d940c4174d4d02a969435576a5da35
  2. 来源:牛客网
  3. void swap(int &a,int &b)
  4. {
  5.      int temp;
  6.      temp=a;
  7.      a=b;
  8.      b=temp;
  9.      cout<<a<<’ ‘<<b<<’\n’;
  10. }
  11.  
  12. int main(){
  13.      
  14.     int x=1;
  15.     int y=2;
  16.     swap(x,y);
  17.     cout<<x<<’ ‘<<y<<’\n’;
  18.     return 0;
  19. }
上面程序输出的是?

解答:

调用函数swap(x, y);传给被调用函数void swap(int &a, int &b )的是x、y的引用,所以在被调用函数里面交换相应的也会交换实参,所以都是

输出2 1,如果传给被调函数的是x,y的数值,而不是引用,那么在被调用函数里面进行交换,并不会交换实参,两种情况的代码如下:

1)传给被调函数的是x,y的引用

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. void swap(int &a, int &b)
  5. {
  6. int temp;
  7. temp = a;
  8. a = b;
  9. b = temp;
  10. cout << a << ' ' << b << ' ';
  11. }
  12. int main(){
  13. int x = 1;
  14. int y = 2;
  15. swap(x, y);
  16. cout << x << ' ' << y << '\n';
  17. return 0;
  18. }

输出结果为:2 1 2 1

2)传递给被调函数的是x,y的数值,而不是引用:

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. void swap(int a, int b)
  5. {
  6. int temp;
  7. temp = a;
  8. a = b;
  9. b = temp;
  10. cout << a << ' ' << b << ' ';
  11. }
  12. int main(){
  13. int x = 1;
  14. int y = 2;
  15. swap(x, y);
  16. cout << x << ' ' << y << '\n';
  17. return 0;
  18. }
输出结果为:2 1 1 2



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/937405
推荐阅读
相关标签
  

闽ICP备14008679号