微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C语言中字符串与字符数组分析

C语言中字符串与字符数组分析

时间:12-01 来源:互联网 点击:

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
#include
#include

#define BUFS 20

int main()
{
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);

return 0;
}

编译以后出现的效果如下:

[gong@Gong-Computer c_languange]$ gcc -g strncpytest.c -o strncpytest
[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中规定对字符串的操作会导致不确定的结果,这也说明了字符串是不能进行修改的。

通过上面的分析,数组和指针还是存在非常大的差别的,在字符串的操作过程中这种差别更加的明显,因此在实际写代码的过程中要时时注意这些小的差别,只有铭记一些概念才能真正的写好代码。

总结:

字符串是一个常量,不应该被修改,修改会出现错误,字符数组可以进行修改,因为数组中的值并不是不变的。在关于字符串的操作中,最好是采用首先将字符串赋值给字符数组,然后通过指针的方式访问进行修改等相关操作,而不能直接对字符串指针进行修改操作。

数组是一段内存的标示,指针只是保存了一个地址值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top