`
leidiqiu
  • 浏览: 135103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C 语言字符串处理的一些问题

阅读更多

C 语言没有字符串的数据类型,处理起来不那么简单,容易发生越界错误。例子如下:

#include <stdio.h>
#include <string.h>

void main()
{
	const char *a="a";
	const char *b="ab";
	char d[10];
//	strcpy(d,a);
	strcat(d,a);
	strcat(d,b);
	printf("%s\n",d);
}

这个例子运行结果是出错,单步跟踪调试,发现 strcpy() 语句前后:

变量
+ d 0x0012ff6c "烫烫烫烫烫烫 B"
+ b 0x00422020 "ab"
+ a 0x00422024 "a"

+ d 0x0012ff6c "烫烫烫烫烫烫 Ba"
+ b 0x61422020 ""
+ a 0x00422000 ""

 

内存
0012FF6C CC CC CC CC CC CC CC CC CC CC CC CC 20 20 42 00 24 20 烫烫烫烫烫烫 B.$
0012FF7E 42 00 C0 FF 12 00

0012FF6C CC CC CC CC CC CC CC CC CC CC CC CC 20 20 42 61 00 20 烫烫烫烫烫烫 Ba.
0012FF7E 42 00 C0 FF 12 00

 

  •  其中:
    • 红色部分,变量 d 的地址,本来定义了 10 个字节的长度,实际分配时,按照 4 的倍数分配,所以是 12 字节
    • 20 20 42 00 为变量 b 的地址,低位在前
    • 24 20 42 00 为变量 a 的地址,低位在前
    • 因为都是局部变量,所以在上分配临时存储空间
    • 加上 strcpy() 后运行正常
    • 对局部变量的操作,实际上是对栈进行操作

strcpy() 源代码

char* strcpy(char * dst, const char * src)
{
	char * cp = dst;
	while( *cp++ = *src++ )
	return( dst );
}

strcat() 源代码

char* strcat ( char * dst , const char * src )
{
	char * cp = dst;
	while( *cp ) cp++;
	while( *cp++ = *src++ ) ; 
	return( dst );
}

 strcmp() 源代码

int strcmp ( const char* src, const char* dst )
{
	int ret = 0 ;
	while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)	++src, ++dst;
	if ( ret < 0 )	ret = -1 ;
	else if ( ret > 0 )	ret = 1 ;
	return( ret );
}

 

分享到:
评论

相关推荐

    C语言字符串练习(习题+答案).zip

    本资源"《C语言字符串练习(习题+答案).zip》"正是针对这一需求而准备的,它包含了C语言字符串操作的专项练习题和对应的答案,帮助学习者巩固和提升在字符串处理方面的技能。 字符串在C语言中扮演着重要角色,它们...

    C语言字符串转换为Python字符串的方法

    将C语言字符串转换为Python字符串需要遵循I/O同样的原则,即来自C中的数据必须根据一些解码器被显式的解码为一个字符串。通常编码格式包括ASCII、Latin-1和UTF-8。如果你并不确定编码方式或者数据是二进制的,你最好...

    C语言实现字符串截取

    通过以上两个自定义函数,我们可以非常方便地从 C 语言中的字符串中截取出所需的子字符串。这些函数不仅提供了灵活性,还具有很好的健壮性,能够有效地处理各种异常情况。这对于处理复杂的字符串操作非常有用。

    C语言中字符串的处理方式

    ### C语言中字符串的处理方式 ...C语言中的字符串处理虽然不如现代编程语言那样直观,但是通过上述介绍的方法和技巧,可以有效地管理和操作字符串。了解这些基础知识对于任何C语言开发者来说都是非常重要的。

    C语言检测字符串是否为json字符串

    在实现这个函数时,可能会用到C语言的字符串处理函数,如`strlen()`、`strchr()`、`strstr()`等,以及一些基本的逻辑判断和循环结构。为了提高效率,还可以使用正则表达式进行匹配,但C语言标准库并不直接支持正则...

    C语言写字符串函数及任意个数求和

    在C语言中,字符串处理是编程中的重要组成部分。C语言本身并不像其他高级语言那样内置了丰富的字符串操作函数,但通过标准库中的`&lt;string.h&gt;`我们可以使用一些基本的字符串函数,如`strcpy`、`strlen`等。然而,为了...

    高速字符串处理功能的 C 语言源程序.zip_C语言_c语言 字符串

    在C语言中,字符串处理是编程中不可或缺的一部分。C语言本身并不包含内置的高效字符串库,但通过标准库中的`&lt;string.h&gt;`,我们可以访问一些基本的字符串操作函数。本资料包提供了高速字符串处理功能的C语言源程序,...

    字符串处理函数列表,字符串处理函数列表

    以下是一些常见的字符串处理函数,这些函数通常在C语言或其他类似语言中使用,虽然这里没有提供具体的编程语言环境,但理解这些函数的基本功能对于任何程序员都是有益的。 1. bcmp:这个函数用于比较两个内存块的...

    库卡机器人高级字符串处理指令文档

    该语言提供了强大的字符串处理功能,包括字符的切割、替换、合并、比较等操作。通过学习和掌握CREAD/CWRITE编程指令,用户可以更好地控制和优化机器人的行为,提高生产效率和产品质量。 库卡机器人高级字符串处理...

    C++字符串处理大集合

    C 语言字符串处理函数 1. 字符串长度:使用 `strlen` 函数可以获取字符串的长度,例如 `strlen(st)`。 2. 字符串比较:使用 `strcmp` 函数可以比较两个字符串,例如 `strcmp(st1, st2)`。如果两个字符串相同,返回...

    更安全的C语言字符串处理函数

    还有一点值得引起注意:当你引用 strsafe 系列函数时,原有的 C 语言字符串处理函数都将被自动进行 #undef 处理。这也没问题,因为调试过程中的出错信息将会告诉你哪些函数已经被相应的 strsafe 系列函数取代了。好...

    c语言连接字符串

    其中,字符串处理是C语言编程中一个重要的知识点,尤其是字符串的连接操作,更是日常编程中频繁用到的技术之一。根据给定的文件信息,我们将深入探讨C语言中连接字符串的实现方法及相关知识。 ### C语言中的字符串 ...

    work2_分割字符串_字符串处理_

    字符串处理不仅是C语言的基本操作,也是其他编程语言(如Python、Java、JavaScript等)的核心部分。在Python中,可以使用内置的 `split()` 方法进行字符串分割,而在JavaScript中,可以使用 `split()` 函数或者正则...

    C语言,C++字符串处理函数

    根据给定的信息,我们可以归纳和总结出以下关于 C 语言及 C++ 中字符串处理的关键知识点: ### 一、字符串处理概述 在 C 语言及 C++ 中,字符串是一系列字符的序列,通常以空字符(`\0`)作为结束标志。处理字符串...

    C语言中字符串的处理函数大全

    本文将详细介绍C语言中的字符串处理函数,并通过具体的示例来帮助读者更好地理解和运用这些函数。 #### 二、字符串处理函数详解 ##### 1. stpcpy - 拷贝一个字符串到另一个 - **功能**: 将源字符串完整地复制到...

    基于C语言的字符串处理算法研究.pdf

    文章指出,理解和掌握字符串处理是学习任何编程语言的基础,对于解决实际问题至关重要。然而,传统的教学方法往往因为算法的复杂性导致学生难以理解和掌握。作者冯素梅通过多年教学经验,对这个问题提出了更直观、...

    C语言json字符串的生成与解析

    在C语言中,处理JSON字符串涉及到解析JSON文本为数据结构,以及将数据结构转换为JSON字符串。以下是对C语言中JSON字符串生成与解析的详细说明: 1. JSON数据格式: JSON是一种基于文本的格式,它使用键值对来表示...

    C语言字符、字符串定义及相关函数

    C语言是高级编程语言中较为底层的一门语言,它没有专门的字符串类型,而是使用字符数组(char数组)来表示字符串。这意味着程序员在处理字符串时必须更加小心,确保为字符串留有足够空间并正确处理字符串的结束符'\0...

    VB中对字符串的处理及其扩展

    本文将详细介绍VB中对于字符串处理的基本方法及其一些实用的扩展技巧。 #### 1. 基本字符串操作 ##### 1.1 `Left`, `Right`, `Mid` 函数 - **`Left`**:返回字符串左侧指定数量的字符。 - 示例:`Left("Hello ...

    C 语言 指针实现字符串的逆序调序输出

    在提供的压缩包文件中,"字符串处理.exe"可能是编译后的可执行程序,用于运行这些操作,而"字符串处理源代码.c.txt"则包含了实现这些功能的源代码。通过阅读和理解这个源代码,你可以深入学习C语言中指针和字符串...

Global site tag (gtag.js) - Google Analytics