C语言字符串的表示
字符串数组表示:
char str[]="abc";有4个元素以'\0'结束
字符串指针表示:
char *str="abc";//有4个元素以'\0'结束
字符串修改
字符串数组修改:
char [] = "hello world";
str[0] = 'H'; // 将数组的第一个字符变为'H'
str[6] = '\0'; // 截断字符串,只留下前6个字符
printf("%s", str); // 输出修改后的字符串
字符指针的修改;
字符串指针,若是指向的内存区域是字符串常量,那么该区域的值不能修改,因为字符串常量在内存中是只读的。若是指向的是动态分配的内存或者栈内存等可写的内存区域,那么指针所指向的内存区域的值是可以修改的。有两种方法:
借用字符串数组:
char str_list[3][10] = {"hello", "world", "test"};
char *ptr;
int i, j;
for (i = 0; i < 3; i++) {
ptr = str_list[i]; // 指针指向当前字符串的第一个字符
for (j = 0; j < 10; j++) {
*ptr = 'a'; // 将当前字符修改为 'a'
ptr++; // 指针后移,指向下一个字符
}
}
使用malloc:
char *p=(char *)malloc(10);//malloc分配10字节首地址给p;
strcpy(p,"hello");//strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
printf("%s",p);
free(p);
return 0;
错误写法:
char *str = "hello, world!"; // 字符串指针指向一个字符串常量
str[0] = 'H'; // 试图修改第一个字符
printf("%s\n", str);//输出不了一点
return 0;
总结
如果需要修改字符串,建议使用字符串数组;