1. 字符串宏
#define CONST_STR "const str"
宏在预编译的时候会替换成实际的值
2.数组
数组名对应一块内存,在生命周期内其地址和容量不会改变,数组里面的内容可以变。
3.指针
指针指向一块内存,如果指向字符串常量(RO),则不能修改内容。
如果申请了一块内存,复制字符串常量,则可以修改内容
-
#include <stdio.h>
-
#include <string.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
-
-
#define CONST_STR "const string"
-
typedef void (*string_test_routine_t)();
-
-
void pointer_strcpy_macro(void)
-
{
-
char *p;
-
p = (char*)malloc(100);
-
strcpy(p, CONST_STR);
-
printf("char *p;\np = (char *)malloc(100);\nstrcpy(p, CONST_STR);\np[0] = 'a';\n");
-
printf("\n");
-
p[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
void pointer_strcpy_string(void)
-
{
-
char *p;
-
p = (char*)malloc(100);
-
strcpy(p, "const string");
-
printf("char *p;\np = (char *)malloc(100);\nstrcpy(p, \"const string\");\np[0] = 'a';\n");
-
printf("\n");
-
p[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
-
void pointer_macro_string(void)
-
{
-
char *p = CONST_STR;
-
printf("char *p = CONST_STR;\np[0] = 'a'; \n");
-
printf("\n");
-
p[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
-
void pointer_string(void)
-
{
-
char *p = "const string";
-
printf("char *p = \"const string\";\np[0] = 'a'; \n");
-
printf("\n");
-
p[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
-
-
void array_macro_string(void)
-
{
-
char a[100] = CONST_STR;
-
printf("char a[100] = CONST_STR;\na[0] = 'a'; \n");
-
printf("\n");
-
a[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
-
-
void array_string(void)
-
{
-
char a[100] = "const string";
-
printf("char a[100] = \"const string\";\na[0] = 'a'; \n");
-
printf("\n");
-
a[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
void array_strcpy_string(void)
-
{
-
char a[100];
-
strcpy(a, "const string");
-
printf("char a[100];\nstrcpy(a, \"const string\");\na[0] = 'a';\n");
-
printf("\n");
-
a[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
-
void array_strcpy_macro(void)
-
{
-
char a[100];
-
strcpy(a, CONST_STR);
-
printf("char a[100];\nstrcpy(a, CONST_STR);\na[0] = 'a';\n");
-
printf("\n");
-
a[0] = 'a';
-
printf("--> ok\n\n\n");
-
}
-
-
static string_test_routine_t func_base[] = {
-
array_strcpy_string,
-
array_macro_string,
-
array_string,
-
array_strcpy_macro,
-
pointer_macro_string,
-
pointer_string,
-
pointer_strcpy_macro,
-
pointer_strcpy_string
-
};
-
-
#define NUM_FUNC (sizeof (func_base) / sizeof(func_base[0]))
-
-
void test_string(void)
-
{
-
pid_t pid;
-
int i = 0;
-
string_test_routine_t * func = func_base;
-
-
for ( i = 0; i < NUM_FUNC; i++ )
-
{
-
pid = fork();
-
if ( pid < 0 )
-
{
-
printf("fork() err\n");
-
}
-
else if ( pid == 0 )
-
{
-
(func[i])();
-
exit(0);
-
}
-
else
-
{
-
sleep( 1 );
-
}
-
}
-
}
-
-
int main()
-
{
-
test_string();
-
-
return 0;
-
}
阅读(1248) | 评论(0) | 转发(1) |