1.
下面程序段的输出结果是()
3.下面程序段的输出结果是
解答:出错
补充:
char c[5] = {'a','b','\0','c','\0'};
printf("%s", c);
解答:ab
%s 为输出字符串,遇到'\0'结束
#include <iostream>
using namespace std;
int main(void) {
char c[5] = { 'a', 'b', '\0', 'c', 'd' };
printf("%s\n", c);
cout << c << endl;
return 0;
}
cout也是遇到'\0'就结束
链接:https://www.nowcoder.com/questionTerminal/82eb89630bd648d195bf46acc46ea6a5
来源:牛客网
void getmemory(char *p)
{
p=(char*)malloc(100);
}
void test(void)
{
char * str = null;
getmemory(str);
strcpy(str,”hello,world”);
printf(str);
}
请问运行test函数会有什么样的结果?
解答:
-
segmentation fault
可以参考博客: C/C++ 笔试面试(3)——内存管理GetMemory
正确代码如下:
#include <iostream>
using namespace std;
/***************内存管理GetMemory************************/
void getmemory(char **p)
{
*p = (char*)malloc(100);//给p所指向的str分配了内存
}
int main()
{
char *str = NULL;
getmemory(&str); //&str是指针的地址,将指针的地址传给形参p,则p也指向str,
strcpy(str, "hello, world");
printf(str);
return 0;
}
3.下面程序段的输出结果是
链接:https://www.nowcoder.com/questionTerminal/290f95b685dc4a1f8d316d6447fe7529
来源:牛客网
char *p1 = ”123”, *p2 = ”ABC”, str[50] = “xyz”;
strcpy(str + 2, strcat(p1, p2));
printf(“%s\n”, str);
链接:https://www.nowcoder.com/questionTerminal/290f95b685dc4a1f8d316d6447fe7529
来源:牛客网
原代码有错:p1和p2都指向常量字符串,在常量区,所以不能对其进行操作;改为数组即可,但是用字符串初始化
来源:牛客网
原代码有错:p1和p2都指向常量字符串,在常量区,所以不能对其进行操作;改为数组即可,但是用字符串初始化
数组时要记得将数组长度加1,
因为字符串默认的末尾有一个‘\0’;第二点要注意的是,strcat函数的p1要有足够的
空间来容纳p1和p2连接后的串长。
正确代码如下:
#include <iostream>
using namespace std;
int main()
{
//char *p1 = "123", *p2 = "ABC", str[50] = "xyz";
//声明字符串指针p1,p1和p2都指向常量字符串,在常量区,所以不能对其进行操作;改为数组即可,
char p1[10] = "123", p2[] = "ABC", str[50] = "xyz";
strcpy(str + 2, strcat(p1, p2));
printf("%s\n", str);
}
补充:
strcat:将两个char类型连接。
原型
extern char *strcat(char *dest, const char *src);
功能
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。
说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
注意:一般dest是一个字符数组,不能是字符常量,char *指针修改字符串常量中的字符会导致
Segment fault错误