C语言中字符串与字符数组分析
int hashval = func(key,hashmap-> while(hashmap-> if((hashmap-> && (strcmp(hashmap->map[hashval].pair-> hashval %= hashmap-> if(hashmap-> hashmap-> hashmap-> hashmap-> else if((hashmap-> && (strcmp(hashmap->map[hashval].pair-> free(hashmap->map[hashval].pair-> hashmap->map[hashval].pair-> && (strcmp(map[hashval].pair-> (strcmp(map[hashval].pair-> free(map[hashval].pair-> map[hashval].pair-> map[hashval].pair-> int size = next_prime(2*hashmap-> if(hashmap-> hashmap->map[i].pair-> hashmap->map[i].pair-> delete_array(&hashmap->map,hashmap-> hashmap-> hashmap-> if(hashmap-> //hashmap-> //hashmap-> int hashval = func(key, hashmap-> while(hashmap-> if((hashmap-> && (strcmp(hashmap->map[hashval].pair-> hashval %= hashmap-> if((hashmap-> && (strcmp(hashmap->map[hashval].pair-> return hashmap-> int hashval = func(key, hashmap-> while(hashmap-> if((hashmap-> && strcmp(hashmap->map[hashval].pair-> hashval %= hashmap-> if((hashmap-> (strcmp(hashmap->map[hashval].pair-> hashmap-> delete_pair(&(hashmap-> hashmap-> hashmap-> return map-> return map-> int size = hashmap-> if(hashmap-> delete_pair(&(hashmap-> hashmap-> hashmap-> hashmap-> free(hashmap-> hashmap-> return pair-> return pair-> if(!alloc_hashmap(&newhashmap,hashmap-> if(hashmap-> hashmap->map[i].pair-> hashmap->map[i].pair-> else if(hashmap-> newhashmap-> printf("%s->-f(%s)->%d-> printf("%s-> printf("%s-> 48->-f(48)->4-> 108->-f(108)->5-> 78->-f(78)->1-> 87->-f(87)->12-> 36->-f(36)->3-> 59->-f(59)->4-> 32->-f(32)->12-> 210->-f(210)->10-> 105->-f(105)->2-> 41->-f(41)->10-> 1010->-f(1010)->11-> 19->-f(19)->8-> 25->-f(25)->3-> 28->-f(28)->6-> 16->-f(16)->5-> 44->-f(44)->0-> 85->-f(85)->10-> 51->-f(51)->9-> 54->-f(54)->12-> 107->-f(107)->4-> 73->-f(73)->9-> 1010->-f(1010)->11-> 通过上面的分析我们应该字符串和字符数组还是存在很多差别的,但是只是理论上的分析,接下来采用程序进行测试。这个程序主要检测字符串是否为常量,而字符数组是可以修改的。 #include #define BUFS 20 int main() /*修改字符数组*/ /*修改字符串*/ /*修改字符串*/ return 0; 编译以后出现的效果如下: [gong@Gong-Computer c_languange]$ gcc -g strncpytest.c -o strncpytest 结合上面的代码可以知道关于字符数组的操作都顺利的完成了,但是字符串的修改却没有正常的完成,出现了 通过上面的分析,数组和指针还是存在非常大的差别的,在字符串的操作过程中这种差别更加的明显,因此在实际写代码的过程中要时时注意这些小的差别,只有铭记一些概念才能真正的写好代码。 总结: 字符串是一个常量,不应该被修改,修改会出现错误,字符数组可以进行修改,因为数组中的值并不是不变的。在关于字符串的操作中,最好是采用首先将字符串赋值给字符数组,然后通过指针的方式访问进行修改等相关操作,而不能直接对字符串指针进行修改操作。 数组是一段内存的标示,指针只是保存了一个地址值。
#include
#include
{
char s[] = {"This is just a test!!"};
char d[] = {"Hello String strncpy!!"};
char *str = "String constant!";
char *str1 = "Testing!!";
/*不能采用定义指针的情况下就进行字符串的操作,
*需要分配一定长度的空间,
*因为没有内存空间不能操作
*/
char *p = malloc(BUFS * sizeof(char));
strncpy(p,s,strlen(s));
printf("p = %s",p);
printf("d = %s",d);
strncpy(d,s,strlen(s));
printf("d = %s",d);
strncpy(d,s,strlen(d));
printf("d = %s",d);
printf("Test the string constant");
printf("Constant String str = %s",str);
strncpy(str,d,strlen(str));
printf("p = %s",p);
printf("d = %s",d);
strncpy(d,s,strlen(s));
printf("d = %s",d);
strncpy(d,s,strlen(d));
printf("d = %s",d);
printf("Test the string constant");
printf("Constant String str = %s",str);
strncpy(str,d,strlen(str));
printf("Constant String str = %s",str);
}
[gong@Gong-Computer c_languange]$ ./strncpytest
p = This is just a
d = Hello String
d = This is just a
d = This is just a
Test the string constant
Constant String str = String
Segmentation fault (core dumped)
异常(Segmentation fault (core dumped)),实质上就是因为字符串是不能修改的,导致了问题的抛出。据说在ANSI C中规定对字符串的操作会导致不确定的结果,这也说明了字符串是不能进行修改的。
C语言字符串字符数 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)