#include <string.h>
#include <stdio.h>
int main()
{
const char *dd = " ,*";
char str[] = "Hello world, Nihao,Good Bye * Night";
char *ptr;
ptr = strtok(str,dd);
while(ptr)
{
printf("%s\n", ptr);
ptr = strtok(NULL, dd);
}
return 0;
}
相关推荐
C语言指针进阶:从内存地址到函数指针的深度解析与实践
在计算机编程中,内存地址是数据存储和访问的基础概念,它直接对应硬件层面的存储单元位置。指针作为记录内存地址的变量,其核心原理是通过存储地址值来实现对数据的间接访问,这种间接寻址机制赋予了程序动态管理内存和构建复杂数据结构的能力。从技术价值看,指针是连接高级语言抽象与底层硬件的关键桥梁,能够实现高效的内存操作、灵活的数据结构以及运行时行为动态绑定。在应用场景上,指针广泛应用于操作系统内核、数据库系统、游戏引擎等底层开发,以及实现动态数组、链表、树等数据结构和回调函数、插件系统等高级特性。本文聚焦C语言指针进阶
C语言字符串函数深度解析:安全、效率与实战避坑指南
在C语言编程中,字符串操作是处理文本数据的基础,其本质是以空字符'\0'结尾的字符数组。由于C语言将内存管理的责任完全交给程序员,缺乏自动边界检查,不当的字符串操作极易引发缓冲区溢出等严重内存错误和安全漏洞。理解字符串函数的底层原理,是编写健壮、安全代码的关键。从安全角度出发,现代实践优先推荐使用带长度限制的函数版本(如strncpy、snprintf)作为防止溢出的第一道防线。在保证安全的前提下,还需关注操作效率,例如避免在循环中重复调用strlen,或使用memcpy进行已知长度的批量复制以提升性能。这
第三课 NXP S32K144 MCAL 集成到Vector davinci SIP-第一弹
将NXP S32K144 MCAL 集成到Vector davinci SIP的第三方库,导出ARXMl给Vector davinci SIP使用
从 strtok 到 stringstream:C++ 字符串分割的演进与避坑指南
本文深入探讨了C++中从strtok到stringstream的字符串分割技术演进,对比了两种方法的性能与安全性,并提供了现代C++字符串处理的避坑指南。重点分析了stringstream在字符串分割中的线程安全、非破坏性操作等优势,帮助开发者编写更健壮的代码。
联想拯救者恢复出厂设置全攻略
通过本文介绍的几种方法,你可以轻松地将联想拯救者恢复到出厂系统状态。无论是通过Windows恢复选项、高级启动选项还是一键恢复功能,都能帮助你解决系统问题、清除个人信息或重置软件环境。在重置前,请务必备份重要数据,并确保了解重置的影响。重置完成后,进行适当的系统设置和软件安装,让你的联想拯救者焕然一新,继续为你提供高效、稳定的计算体验。
Matlab2018a崩溃解决的办法No sandbox or build area path
Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are
C语言内存与字符串操作深度解析:从strtok、memcpy到AArch64 NEON优化
在C语言编程中,内存与字符串操作是系统编程、嵌入式开发及高性能计算的核心基础。其原理在于直接操作内存地址与字节序列,实现对数据的高效处理。掌握这些底层函数的技术价值在于,它们直接决定了程序的性能、稳定性与安全性。例如,memcpy与memmove的差异体现了对内存重叠场景的处理策略,而strtok的线程安全问题则揭示了可重入设计的重要性。在实际应用场景中,无论是网络协议解析、自定义内存池实现,还是利用AArch64架构的NEON指令集进行SIMD优化,都离不开对这些基础函数的深刻理解与精准运用。本文聚焦于s
uni-app开发-第3篇:uni-app 页面与路由
本文详细介绍了 uni-app 中的页面开发与路由管理。首先,页面是应用的基础单元,创建页面时需在pages目录下新建文件夹和.vue文件,页面结构由<template>、<script>和<style>三部分组成。uni-app 页面生命周期函数包括onShow、onReady、onHide和onUnload,分别用于处理页面显示、渲染完成、隐藏和卸载时的逻辑。其次,路由管理通过pages.json文件配置页面路径和样式,并提供uni.navigateTo等方法进行路由
C语言内存与字符串操作:从strtok、memcpy陷阱到AArch64 NEON优化
在C语言编程中,内存操作与字符串处理是核心基础。memcpy、strtok等函数直接操作内存地址,通过指针和字节拷贝实现高效数据搬运与分割,其底层原理涉及内存布局、指针运算和CPU指令优化。这些函数为系统编程、嵌入式开发和高性能计算提供了底层控制能力,但同时也因缺乏安全检查而成为常见错误来源。在操作系统内核、网络协议栈及音视频编解码等场景中,正确使用它们至关重要。本文聚焦于strtok的线程安全陷阱与memcpy的内存重叠问题,并探讨如何利用AArch64架构的NEON指令集进行手动优化,以提升关键路径性能
27、VXLAN BGP EVPN网络的自动化部署与运维管理
本文深入探讨了VXLAN BGP EVPN网络从初始配置到运维管理的全生命周期自动化流程,涵盖Day-0设备自动上线、Day-0.5增量变更与连接验证、Day-1覆盖服务配置与计算集成,以及Day-2监控与故障排查。详细介绍了推送与拉取两种配置模型、主流工具如Cisco VTS、NFM、DCNM的功能特点,以及开源自动化工具的应用。通过流程图和命令示例,系统展示了MAC/IP学习、BGP通告和VXLAN封装的验证方法,为构建高效、可扩展的数据中心网络提供了全面的技术指导。
基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法
基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法
由编程珠玑字符串倒置问题拓展到split之C\C++实现
一道字符串倒置的题目,不是全部倒置,而是每个单词倒置,单词之间顺序不变。 这道题目应该是很经典的,好多次看到,包含编程珠玑的案例,典型的O(n)算法,每个word倒置,再整个string倒置。 这次要上战场了,却发现C C++的 字符串函数不熟练了,最近写的都是Java,一个Split函数爽到爆,于是决定要吧C C++的常用字符串函数过一遍, 并对各种方法实现,此处总结下Sp
【OTFS与信号处理:论文阅读4】OTFS时延多普勒域嵌入导频辅助信道估计(已更新)
【OTFS与信号处理:论文阅读】Embedded Pilot-Aided Channel Estimation for OTFS in Delay–Doppler Channel(快来看看OTFS嵌入式导频设计的经典之作!!!)
C语言字符串函数全解析:从基础原理到安全编程实践
在C语言编程中,字符串处理是核心基础,涉及字符数组、内存管理和空字符终止等底层概念。其原理基于对连续内存字节的直接操作,通过标准库函数实现高效的数据处理。掌握这些函数的技术价值在于能够编写出高效、稳定且内存安全的程序,避免缓冲区溢出等常见漏洞。在应用场景上,无论是系统编程、嵌入式开发还是网络数据处理,都离不开字符串的复制、比较、查找与分割等操作。本文聚焦于C语言字符串函数,深入探讨strcpy、strncpy、strcat等关键工具的安全用法与典型陷阱,并结合strlen和memcpy等函数,解析如何在实际
Android16 3576 u盘固件升级功能添加
1.在u-boot/drivers/power/pmic/rk8xx.c。这里是读取power键的寄存器判断长短按。
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
C语言字符串函数深度解析:从基础原理到实战避坑指南
在C语言编程中,字符串处理是核心基础操作,涉及内存管理、数据安全与程序效率。字符串本质是以空字符'\0'结尾的字符数组,标准库提供了一系列函数对其进行操作。理解这些函数的底层原理,如内存模型与时间复杂度,是编写健壮代码的关键。其技术价值在于通过高度优化的封装,提升开发效率并规避常见风险,广泛应用于系统编程、嵌入式开发、网络协议解析等场景。本文聚焦于strncpy、snprintf等安全函数的使用技巧,结合缓冲区溢出防御与性能优化,深入剖析字符串复制、比较、查找及分割等核心操作,为开发者提供一套可靠的工程实践
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
大学生版保姆式学《C和指针》——C标准库:常用函数全解与避坑
这一章我们把C语言标准库中最常用、工程开发中最依赖的工具函数集中梳理一遍——包括字符串处理、内存操作、数学计算、错误提示与时间相关函数
深度学习工具包 DeepLearningToolbox
深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[](https://bitdeli.com/free "Bitdeli Badge")
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
C++字符串处理防御性编程实战:从缓冲区溢出到健壮代码
字符串处理是编程中的基础操作,其核心在于数据的安全存储与高效访问。在C++中,字符串涉及内存管理、编码转换和性能优化等多重原理,直接关系到程序的稳定性和安全性。不当的字符串操作可能导致缓冲区溢出、内存泄漏等严重问题,影响软件健壮性。现代C++通过RAII机制和类型安全接口提供了解决方案,例如使用std::string自动管理内存,利用std::string_view避免不必要的拷贝。这些技术在实践中广泛应用于网络通信、文件解析、用户输入处理等场景,能有效防御各类边界情况。本文聚焦C++字符串处理的**防御性
深入剖析C语言string.h:从模拟实现到安全编程实践
在C语言编程中,字符串处理是基础且核心的操作,而string.h头文件提供了诸如strlen、strcpy、strcat等关键函数。理解这些函数的底层原理,对于掌握内存操作、指针运算和算法效率至关重要。通过模拟实现这些函数,开发者能深刻认识到缓冲区溢出等安全隐患的根源,例如strcpy函数不检查目标缓冲区大小可能导致严重的安全漏洞。在实际工程中,应优先使用strncpy、strncat等带长度限制的安全版本,并遵循明确的缓冲区管理原则。本文以strlen和strcpy等热词为切入点,系统解析了其实现机制与性
C语言:全面总结字符与字符串函数
在敲C代码的过程中,尤其是在跟指针和底层内存死磕的时候,处理字符和字符串常常让人头疼。为了方便操作,C语言标准库中提供了一系列极其强大的库函数。今天我把刚学完的第17讲内容做了系统梳理,不仅有核心知识点,还总结了和。写成这篇博客,既是为了巩固知识,也希望能帮到一起学习C/C++的同学们!
瑞萨RL78编译器V1.16.00深度解析:全局优化增强与macOS支持
在嵌入式系统开发中,编译器优化是提升代码执行效率和减少存储占用的核心技术。其原理是通过分析源代码,在保证程序语义不变的前提下,对指令序列进行重组、删减和替换,例如进行常量传播、死代码消除和循环优化。这种优化的技术价值在于,它能够直接降低微控制器的功耗、提升实时响应能力,并允许在资源受限的设备上实现更复杂的功能。在嵌入式实时系统、物联网终端和汽车电子等对性能、功耗和成本极为敏感的应用场景中,高效的编译器优化尤为关键。瑞萨RL78编译器最新V1.16.00版本,正是针对这些需求进行了显著增强,其核心亮点在于对`
C语言字符串与内存函数深度解析:从原理到安全实现
在C语言编程中,字符串处理和内存操作是两项核心基础技能,深刻理解其底层原理是编写健壮、高效代码的关键。字符串本质上是以空字符'\0'结尾的一段连续内存,因此对字符串的操作,如拷贝、连接、比较,其底层逻辑都离不开对内存的直接读写。这涉及到**缓冲区溢出**这一经典且高危的安全漏洞,其根源在于函数未对目标内存边界进行有效检查。为了从根源上提升代码安全性,现代编程实践强调使用带长度检查的安全函数,并深入理解标准库中`strcpy`、`memcpy`等函数的实现细节与潜在陷阱。通过模拟实现这些核心函数,开发者不仅能
华为机试高频题:C++实现坐标移动指令解析与避坑指南
字符串处理是编程中的基础且关键技术,涉及输入解析、格式验证与数据转换等核心环节。其原理在于对字符序列进行分割、遍历与条件判断,以确保数据的完整性与正确性。这项技术的价值在于它是许多实际应用的基石,如命令行工具开发、数据清洗、协议解析等场景。在工程实践中,严谨的边界条件处理和模块化设计能显著提升代码的健壮性。本文以一道经典的坐标移动模拟题为例,深入剖析如何利用C++标准库稳健地实现指令分割与验证,并针对华为机试中常见的输入陷阱,如空指令、非法字符等,提供详细的避坑方案与调试技巧。
Go / C / Python / Java 四语言对照学习总览
按统一维度横向对比四门语言的核心知识点,便于交叉记忆与迁移学习。
C++标准库函数深度解析:从容器操作到现代C++实战指南
C++标准库是C++编程的核心组成部分,它通过提供一系列经过高度优化的容器、算法和工具函数,极大地提升了开发效率和代码质量。其设计基于泛型编程思想,实现了数据结构和算法的解耦,使得开发者能够以统一的方式处理不同类型的数据。理解标准库的原理和正确使用方式,对于编写高效、安全的C++代码至关重要。在实际工程中,容器操作(如vector的push_back/emplace_back、map的查找与插入)、迭代器失效、智能指针的内存管理以及算法库(如sort、find、transform)的灵活运用,是提升代码性能
竞赛字符串算法避坑指南:从边界陷阱到多算法协同
字符串处理是算法竞赛的核心基础能力,涉及匹配、回文、分割、转换等关键场景。其底层原理涵盖时间复杂度约束、内存布局特性、编码兼容性与状态机建模等维度。技术价值在于通过算法选型(如KMP/Rabin-Karp/AC自动机)、结构优化(Manacher/PAM/后缀数组)和工程鲁棒性(空串处理、Unicode支持、STL安全封装)实现高效稳定求解。典型应用场景包括大规模文本匹配、动态回文统计、多模式日志解析及跨语言日期转换。本文聚焦省赛国赛高频失分点,系统拆解数据规模伪装、边界语义歧义与多算法嵌套设计三大命题逻辑
487



被折叠的 条评论
为什么被折叠?



