当前位置: 首页 > news >正文

[大师C语言(第二十五篇)]C语言字符串探秘

引言

字符串是编程中不可或缺的基本数据类型之一,它用于表示和操作文本数据。在C语言中,字符串以一种独特的方式实现,与许多其他编程语言的处理方式不同。本文将深入探讨C语言字符串背后的技术,帮助你更好地理解和应用字符串。

第一部分:字符串的基本概念和操作

1.1 字符串的定义

在C语言中,字符串不是作为一个独立的内置数据类型,而是作为字符数组来处理的。一个字符串是由一系列字符组成的序列,以一个特殊的字符’\0’(空字符)作为结束标志。

char str[] = "Hello, World!";

在上面的例子中,str是一个包含14个字符的数组,其中最后一个字符是空字符’\0’,用来表示字符串的结束。

1.2 字符串的初始化

字符串可以像普通数组一样初始化,也可以使用字符串字面量来初始化。

char str[] = "Hello"; // 自动计算长度,包含空字符
char str2[10] = "Hello"; // 明确指定长度,空字符会被自动添加

1.3 字符串的长度

C语言中没有内置的字符串长度函数,因此通常需要自己编写函数来计算字符串的长度。

#include <stdio.h>int getStringLength(const char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;
}int main() {char str[] = "Hello, World!";printf("The length of the string is: %d\n", getStringLength(str));return 0;
}

1.4 字符串的输出

可以使用printf函数来输出字符串。

#include <stdio.h>int main() {char str[] = "Hello, World!";printf("%s\n", str);return 0;
}

1.5 字符串的输入

可以使用scanfgets函数来从用户输入读取字符串。gets函数存在安全风险,因为它不检查字符串长度,可能导致缓冲区溢出。因此,通常建议使用fgets函数。

#include <stdio.h>int main() {char str[20];printf("Enter a string: ");fgets(str, sizeof(str), stdin);printf("You entered: %s\n", str);return 0;
}

1.6 字符串的连接

在C语言中,字符串的连接需要手动实现,因为没有内置的字符串连接函数。

#include <stdio.h>
#include <string.h>void stringConcat(char *dest, const char *src) {while (*dest != '\0') {dest++;}while (*src != '\0') {*dest = *src;dest++;src++;}*dest = '\0';
}int main() {char str1[20] = "Hello, ";char str2[] = "World!";stringConcat(str1, str2);printf("Concatenated string: %s\n", str1);return 0;
}

总结

在第一部分中,我们介绍了C语言字符串的基本概念和操作,包括字符串的定义、初始化、长度计算、输出、输入以及字符串的连接。这些知识是理解C语言字符串的基础,为后续深入探讨字符串的更高级应用打下了坚实的基础。在下一部分中,我们将继续探讨字符串的更多操作和特性。

第二部分:字符串的更多操作和特性

2.1 字符串比较

在C语言中,字符串比较通常使用strcmp函数,该函数来自string.h头文件。strcmp函数比较两个字符串,返回三个可能的值:0(如果字符串相等)、小于0(如果第一个字符串在字典顺序上小于第二个字符串)或大于0(如果第一个字符串在字典顺序上大于第二个字符串)。

#include <stdio.h>
#include <string.h>int main() {char str1[] = "Apple";char str2[] = "Banana";int result = strcmp(str1, str2);if (result < 0) {printf("str1 is less than str2\n");} else if (result > 0) {printf("str1 is greater than str2\n");} else {printf("str1 is equal to str2\n");}return 0;
}

2.2 字符串复制

字符串复制使用strcpy函数,该函数同样来自string.h头文件。strcpy函数将源字符串复制到目标字符串中,确保目标字符串有足够的空间来存储复制的字符串。

#include <stdio.h>
#include <string.h>int main() {char str1[] = "Hello, World!";char str2[20];strcpy(str2, str1);printf("Copied string: %s\n", str2);return 0;
}

2.3 字符串子串

提取字符串的子串可以使用strncpy函数,该函数允许指定要复制的字符数量。如果要确保子串以空字符结尾,需要手动添加空字符。

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World!";char subStr[10];strncpy(subStr, str, 5); // 复制前5个字符subStr[5] = '\0'; // 确保子串以空字符结尾printf("Substring: %s\n", subStr);return 0;
}

2.4 字符串查找

在字符串中查找子串或字符可以使用strstr函数(查找子串)或strchr函数(查找字符)。strstr函数返回子串在字符串中首次出现的位置的指针,如果没有找到则返回NULL。strchr函数返回字符在字符串中首次出现的位置的指针,如果没有找到则返回NULL。

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World!";char *pos = strstr(str, "World");if (pos != NULL) {printf("Substring found: %s\n", pos);} else {printf("Substring not found.\n");}return 0;
}

2.5 字符串转换

字符串与数值之间的转换在C语言中需要手动实现。可以使用atoi(整数转换)和atof(浮点数转换)等函数,这些函数同样来自stdlib.h头文件。

#include <stdio.h>
#include <stdlib.h>int main() {char str[] = "123";int num = atoi(str);printf("String to integer: %d\n", num);return 0;
}

总结

在第二部分中,我们介绍了C语言字符串的一些高级操作和特性,包括字符串比较、复制、子串提取、查找以及字符串与数值的转换。这些操作和特性是处理C语言字符串时常用的高级工具,它们增加了编程的灵活性和功能。在下一部分中,我们将继续深入探讨字符串的其他高级应用和技巧。

第三部分:字符串的高级应用和技巧

3.1 字符串的分割

在C语言中,字符串的分割通常需要手动实现。一种常见的方法是使用strtok函数,它可以从字符串中提取子串,并将剩余的字符串作为下一次调用的参数。

#include <stdio.h>
#include <string.h>int main() {char str[] = "One, Two, Three";char *token;token = strtok(str, ",");while (token != NULL) {printf("Token: %s\n", token);token = strtok(NULL, ",");}return 0;
}

3.2 字符串与函数参数

在C语言中,字符串可以通过指针作为函数参数传递。这使得函数可以修改字符串的内容。

#include <stdio.h>void modifyString(char *str) {str[0] = 'H'; // 修改第一个字符str[1] = 'e'; // 修改第二个字符
}int main() {char str[] = "Hello";modifyString(str);printf("Modified string: %s\n", str);return 0;
}

3.3 字符串与结构体

在C语言中,字符串可以与结构体结合使用,以存储复杂的数据。

#include <stdio.h>typedef struct Person {char name[50];int age;
} Person;int main() {Person person = {"John", 30};printf("Name: %s, Age: %d\n", person.name, person.age);return 0;
}

3.4 字符串与文件操作

在C语言中,字符串可以用于文件操作,如读取文件内容、写入文件等。

#include <stdio.h>
#include <stdlib.h>int main() {FILE *file = fopen("example.txt", "r");if (file != NULL) {char buffer[200];while (fgets(buffer, sizeof(buffer), file) != NULL) {printf("%s", buffer);}fclose(file);}return 0;
}

3.5 字符串与标准库

C语言提供了丰富的字符串处理函数,这些函数通常位于string.hstdlib.h头文件中。使用这些函数可以简化字符串处理,提高编程效率。

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World!";strncat(str, "!", 1); // 添加字符到字符串printf("Modified string: %s\n", str);return 0;
}

总结

在第三部分中,我们探讨了C语言字符串的一些高级应用和技巧,包括字符串的分割、与函数参数的结合、与结构体的结合、与文件操作的结合以及与标准库的结合。这些高级应用和技巧展示了C语言字符串的强大功能和灵活性,它们使得字符串处理更加高效和方便。在下一部分中,我们将探讨字符串在实际编程中的常见问题和最佳实践。

第四部分:字符串的常见问题和最佳实践

4.1 字符串的安全性问题

在C语言中,字符串操作可能会引发安全问题,如缓冲区溢出。为了避免这些问题,应该遵循一些最佳实践,如使用strncpy而不是strcpy,使用fgets而不是gets,以及确保字符串缓冲区有足够的空间。

#include <stdio.h>
#include <string.h>int main() {char str[20];printf("Enter a string: ");fgets(str, sizeof(str), stdin);printf("You entered: %s\n", str);return 0;
}

4.2 字符串的内存管理

在C语言中,字符串通常作为字符数组处理,这意味着它们需要手动管理内存。为了避免内存泄漏,应该在不再需要字符串时释放其内存。

#include <stdio.h>
#include <stdlib.h>int main() {char *str = (char *)malloc(20 * sizeof(char));if (str != NULL) {strcpy(str, "Hello");printf("Memory allocated: %s\n", str);free(str); // 释放内存str = NULL; // 避免野指针}return 0;
}

4.3 字符串与指针

在C语言中,字符串与指针紧密相关。字符串通常作为字符数组处理,而指针可以用来操作字符串。

#include <stdio.h>int main() {char str[] = "Hello, World!";char *p = str;printf("String: %s\n", str);printf("Pointer: %s\n", p);return 0;
}

4.4 字符串与字符串函数

C语言提供了丰富的字符串处理函数,这些函数通常位于string.hstdlib.h头文件中。使用这些函数可以简化字符串处理,提高编程效率。

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World!";strcpy(str, "Hello, World!"); // 复制字符串strcat(str, "!"); // 连接字符串printf("Modified string: %s\n", str);return 0;
}

4.5 字符串与多字节字符

C语言的字符串通常假设每个字符占用一个字节。如果字符串包含多字节字符,如中文字符,则需要特别处理。

#include <stdio.h>int main() {char str[] = "你好"; // 包含中文字符的字符串printf("String: %s\n", str);return 0;
}

总结

在第四部分中,我们探讨了C语言字符串的一些常见问题和最佳实践,包括字符串的安全性问题、内存管理、与指针的关系、与字符串函数的结合以及处理多字节字符。这些知识点有助于避免编程中的常见错误,提高程序的健壮性和效率。在最后一部分中,我们将通过一些实际的编程示例来巩固和运用这些知识。

第五部分:字符串的实际编程示例

5.1 示例:字符串拼接

在这个示例中,我们将使用字符串拼接来创建一个问候语。

#include <stdio.h>
#include <string.h>int main() {char name[50];printf("Enter your name: ");fgets(name, sizeof(name), stdin);name[strcspn(name, "\n")] = 0; // 移除输入中的换行符char greeting[] = "Hello, ";strcat(greeting, name);strcat(greeting, "!");printf("Greeting: %s\n", greeting);return 0;
}

5.2 示例:字符串排序

在这个示例中,我们将使用字符串比较函数来对字符串进行排序。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int compareStrings(const void *a, const void *b) {return strcmp(*(const char **)a, *(const char **)b);
}int main() {char names[] = {"John", "Alice", "Bob", "Eve"};qsort(names, 4, sizeof(char *), compareStrings);printf("Sorted names: ");for (int i = 0; names[i] != NULL; i++) {printf("%s ", names[i]);}printf("\n");return 0;
}

5.3 示例:字符串查找

在这个示例中,我们将使用字符串查找函数来查找一个单词在一个文本文件中的所有出现。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main() {FILE *file = fopen("example.txt", "r");if (file != NULL) {char word[50];printf("Enter a word to search for: ");fgets(word, sizeof(word), stdin);word[strcspn(word, "\n")] = 0; // 移除输入中的换行符while (fgets(word, sizeof(word), file) != NULL) {char *pos = strstr(word, "search");if (pos != NULL) {printf("Found: %s\n", pos);}}fclose(file);}return 0;
}

5.4 示例:字符串替换

在这个示例中,我们将使用字符串复制和查找函数来替换一个单词在一个文本文件中的所有出现。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main() {FILE *file = fopen("example.txt", "r+");if (file != NULL) {char word[50];printf("Enter a word to replace: ");fgets(word, sizeof(word), stdin);word[strcspn(word, "\n")] = 0; // 移除输入中的换行符while (fgets(word, sizeof(word), file) != NULL) {char *pos = strstr(word, "replace");if (pos != NULL) {pos[0] = 'r';pos[1] = 'e';pos[2] = 'p';pos[3] = 'l';pos[4] = 'a';pos[5] = 'c';pos[6] = 'e';pos[7] = 'd';}}fclose(file);}return 0;
}

5.5 示例:字符串与文件操作

在这个示例中,我们将使用字符串和文件操作函数来创建一个文本文件并写入字符串。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main() {FILE *file = fopen("output.txt", "w");if (file != NULL) {char content[] = "This is the content of the file.";fputs(content, file); // 将字符串写入文件fclose(file);} else {perror("Error opening file");}return 0;
}

总结

在第五部分中,我们通过一系列实际的编程示例来展示了C语言字符串的实际应用。这些示例包括字符串拼接、排序、查找、替换以及字符串与文件操作的结合。这些示例不仅加深了我们对字符串的理解,还提供了在实际编程中应用字符串的最佳实践。通过这些示例,我们可以更好地理解字符串在C语言编程中的重要性,并能够在实际应用中更加有效地使用它。

相关文章:

[大师C语言(第二十五篇)]C语言字符串探秘

引言 字符串是编程中不可或缺的基本数据类型之一&#xff0c;它用于表示和操作文本数据。在C语言中&#xff0c;字符串以一种独特的方式实现&#xff0c;与许多其他编程语言的处理方式不同。本文将深入探讨C语言字符串背后的技术&#xff0c;帮助你更好地理解和应用字符串。 …...

xLua(一) 环境安装笔记

为了方便查阅记录一下xLua的安装地址及方法 1.登录地址下载: https://github.com/Tencent/xLua 2.解压文件 将文件中的这些内容拷贝到项目中的Asset文件夹中 注意 : 工程项目路径不得含有中文 3.将Tools复制到Asset同级目录下 4.导入后会发现有Bug,需要导入工程 5.还有另…...

Python基础教程(十一):数据结构汇总梳理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…...

制造型企业图纸泄露问题,如何从根源解决核心文件资料泄露问题?

制造型企业最核心重要的文件当然是图纸&#xff0c;图纸在制造型企业中起到关键主导地位&#xff0c;如果图纸泄露与研发性企业源代码被泄露一样的严重&#xff0c;制造型企业如何保护核心图纸不被外泄是企业在日常经营过程中的重要组成部分&#xff0c;现在有很多防止泄露的产…...

英伟达最新GPU和互联路线图分析

Nvidia在计算、网络和图形领域独树一帜&#xff0c;其显著优势在于雄厚的资金实力及在生成式人工智能市场的领先地位。凭借卓越的架构、工程和供应链&#xff0c;Nvidia能够自由实施创新路线图&#xff0c;引领行业未来。 到 21 世纪&#xff0c;Nvidia 已经是一个非常成功的创…...

Github 2024-06-10 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目2Go项目2PHP项目1Blade项目1TypeScript项目1Lua项目1Dart项目1Swift项目1Cuda项目1Python项目1MDX项目1Ventoy: 100%开源的可启动USB解决方…...

前后端分离项目中Spring Boot返回的时间与前端相差8个小时

概述 今天在做一个前后端分离项目时,发现从后端获取的时间与从数据库获取的时间相差八个小时&#xff0c;最终排查后发现由于Springboot使用本地时区导致&#xff0c;修改SpringBoot时区后解决 环境 MySQL8SpringBoot 原因排查 发现从后端获取的数据总是比前端快八个小时 …...

stm32MP135裸机编程:使用USB/UART烧录程序到SD卡并从SD卡启动点亮一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf STM32CubeProgrammer v2.16.0 烧录需要的二进制文件1 烧录到SD卡需要哪些文件 参考《轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序》&#xff0c;烧录需要的SD卡文件如下&#xff1a; &a…...

【NoSQL数据库】Redis Cluster集群(含redis集群扩容脚本)

Redis Cluster集群 Redis ClusterRedis 分布式扩展之 Redis Cluster 方案功能数据如何进行存储 redis 集群架构集群伸缩向集群中添加一个新的master节点&#xff0c;并向其中存储 num10 .脚本对redis集群扩容缩容&#xff0c;脚本参数为redis集群&#xff0c;固定从6001移动200…...

重邮计算机网络803-(2)物理层

一.物理层 1.介绍 物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;即&#xff1a; ①机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 ②电气特性 指明在接口电缆的各条线上出现的电压的范围。 ③功能特性 指明某条线上…...

uniapp使用webview内嵌H5的注意事项

一、描述 uniapp项目中构建app&#xff0c;需要内嵌H5页面&#xff0c;在使用webview时&#xff0c;遇到了以下几个问题&#xff1a; 内嵌H5&#xff0c;默认全屏显示&#xff1b;内嵌页面遮挡住了app的自定义tabbar组件&#xff1b;样式修改无效&#xff1b; 二、解决方案&a…...

现代 C++的高效并发编程模式

现代C提供了许多高效的并发编程模式&#xff0c;以满足日益增长的多核和分布式系统的需求。以下是一些常用的高效并发编程模式&#xff1a; 异步编程&#xff1a;使用std::async来创建异步任务&#xff0c;可以在后台执行任务&#xff0c;将结果返回给调用者。 并行编程&#…...

汇编语言作业(五)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、 实验总结 一、实验目的 1.熟悉掌握汇编语言的程序结构&#xff0c;能正确书写数据段、代码段等 2&#xff0c;利用debug功能&#xff0c;查看寄存器&#xff08;CS,IP,AX,DS..)及数据段的…...

收音机的原理笔记

1. 收音机原理 有线广播&#xff1a;我们听到的声音是通过空气振动进行传播&#xff0c;因此可以通过麦克风&#xff08;话筒&#xff09;将这种机械振动转换为电信号&#xff0c;传到远处&#xff0c;再重新通过扬声器&#xff08;喇叭&#xff09;转换为机械振动&#xff0c…...

排序算法案例

排序算法概述 排序算法是计算机科学中的一个重要主题&#xff0c;用于将一组数据按特定顺序排列。排序算法有很多种&#xff0c;每种算法在不同情况下有不同的性能表现。不同的排序算法适用于不同的场景和数据特征。在选择排序算法时&#xff0c;需要考虑数据规模、数据分布以…...

时间序列评价指标

评价指标 均方误差&#xff08; M S E MSE MSE&#xff09; 定义&#xff1a;预测值与实际值之间差异的平方和的平均值。公式&#xff1a; ( M S E 1 n ∑ i 1 n ( y i − y ^ i ) 2 ) (MSE \frac{1}{n}\sum_{i1}^{n}(y_i - \hat{y}_i)^2) (MSEn1​∑i1n​(yi​−y^​i​)…...

Docker:安装 Orion-Visor 服务器运维的技术指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 Orion-Visor 是一种用于管理和监控容器的工具。它提供了一个直观的界面&#xff0c;用于查看容器的状态、资源使用情况以及日志等信息。在这篇技术博客中&#xff0c;我们将介绍如何…...

HarmonyOS Next 系列之底部标签栏TabBar实现(三)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; 文章目录 系列文章目录前言一、实现原理二、…...

mac怎么录制屏幕?这2个方法你值得拥有

在数字化时代&#xff0c;屏幕录制已经成为一种常见且重要的工具&#xff0c;无论是教学演示、游戏直播还是会议记录&#xff0c;屏幕录制都发挥着不可或缺的作用。对于Mac用户而言&#xff0c;如何高效、便捷地进行屏幕录制&#xff0c;是一个值得探讨的话题&#xff0c;可是很…...

爱德华三坐标软件ACdmis.AC-dmis密码注册机

爱德华三坐标软件 AC-DMIS 是一款功能强大的三坐标测量软件&#xff0c;具有以下特点&#xff1a; • 支持多种测量模式&#xff1a;包括接触式测量、非接触式测量、复合式测量等&#xff0c;可以满足不同类型工件的测量需求。 • 高精度测量&#xff1a;采用先进的测量算法和…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...