关于乱码,是由于你的数据没有初始化,并且输出时循环越界引起的,修改为以下即可:include <iostream> include <string.h> using namespace std;int main(){ string str="Hello World!";char arr[50]={0};strcpy(arr,str.c_str());//.c_str()是把string类型转为char*格式!for(int i=0;...
1)没给出str的大小,不知道你定义的多大。至少str要保证120以上。考虑用2的倍数最优可以char str[122...
访问未曾初始化的内存,就会出现意想不到的输出结果(不应该这么做)所以修改for循环为 for(i =0; str[i] != '\0'; i++){ printf(XXX)} 就可以了~ 其中'\0'是字符串的结束符。
C语言字符串以'\0'结尾,如果不以该符号结尾则输出%s时会出错,程序一直往存放字符串的地址访问。而你的程序中并没有赋'\0'给那两个数组,所以会出现乱码。没有出现乱码的数组是因为你初始化了,初始化时编译器会给它加上'\0'符号。
str2.3 说明是将str2前三个字符复制到str1中,而用%s输出str1,但字符串没有结束标志'\0',所以会一直读下去,出现乱码!
改了一个地方:while(*p[k]!=' ')改成while(*p[k]!=' '&&*p[k]!='\0')就好了。完整的程序如下。已经运行过,有什么问题请留言。include <stdio.h>#include <stdlib.h>main(){char str[10000],*p[1000]; char *i=str; int n=1;int k; printf("please input a string...
memset(str2, 0x00, sizeof(str2));当然,也可以在声明的时候进行初始化:char str2[20] = {0};这句也能实现同样的效果。这是C语言习惯,务必养成!'\0'是字符串结束符,每当解释器看到这'\0'才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。
复制过去是从str1[0]处开始存放的 二str2有5个字符 也就是说'\0'没有 所以 才会出现乱码
在上述代码中添加了<wchar.h>头文件和<locale.h>头文件,使用setlocale函数设置本地化环境。接着定义了一个宽字符指针str,并赋值为中文字符。最后使用wprintf函数进行宽字符输出。 方法二:修改编码 除了使用宽字符类型和宽字符输出函数外,还可以通过修改编码的方式来解决中文输出乱码的问题。