V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zzzkkk  ›  全部回复第 21 页 / 共 67 页
回复总数  1340
1 ... 17  18  19  20  21  22  23  24  25  26 ... 67  
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
各位 c c++老鸟 谢谢了 我的确没做过 c c++项目
但是我这个算法还是最好的吧
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@learningman
没用过的臃肿框架 不知道不是很正常么
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@learningman
你有本事写个更高效的 c 代码出来
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
是字符串里的单词顺序反转 不是简单字母反转
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@learningman

我这代码还真把字符串反转了
你有本事写个更高效的出来
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
重新申明:
fsanitize 无论字符串多短 都报错了

早上具体什么情况 一会报错 一会不报错 想不起来了
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@geelaw
那你有什么更好的 while ? 已经是最高效的了
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@misdake
第 14 层 早就加了字符串末尾判断
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@misdake
这里需要把 while(*start2 != ' ') 改成 while(*start2 != ' ' && *start2 != '\0')
@geelaw

嗯 这里需要把 while(*start = '' ) 改成 while(start >=s && *start == '')
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@cy18

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main(int argc, char **argv) {
char s[] = " a bc ed sdff";
printf("%d\n%d\n",sizeof(s),strlen(s));
char *start, *start2;
start = s;
while ( *start != '\0') {
start++;
}
--start;
char s2[strlen(s) + 1];
char *s2p = s2;
char flag;
while (start > s) {
flag = 0;
while ( *start == ' ') start--;
while (start >= s && *start != ' ') start--;
start2 = start;
++start2;
while ( *start2 != ' ' && *start2 != '\0') {
*s2p++ = *start2++;
if (flag == 0) flag = 1;
}
if (flag == 1) {
*s2p++ = ' ';
}
}
*s2p = '\0';
start = s;
s2p = s2;
while ( *s2p != '\0') *start++ = *s2p++;
*start = '\0';
printf("%s\n%d\n", s, (int) strlen(s));

}




编译:

cc c.c -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer -O0 -Wall
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@qbqbqbqb
数组名前面就是一个 byte 不过不属于数组 吓谁啊
别小看了这几个 while 循环 是老鸟才能写得出来的
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@qbqbqbqb
减到非空格的位置退出 while 循环
+1 不是刚好指向空格吗?还需要什么运气?

我发现 fsanitize 对字符串增加到一定长度后才报错
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@geelaw
char s[] = "add";

这样也是合法的 编译期就能确定长度 再简单不过的事
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@geelaw
这里没有 c 板块 只有 c++

我本来想发 c 板块
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@qbqbqbqb
后面先+1 了 刚好指向空格
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
减到 s 之前也没问题

下面 start2++ 刚好指向空格

下面的代码不会执行
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
一开始数组下标是正确的 我当时好像去掉了下标 后来又加上正确下标 我发现 fsanitize 报假阳性

为了截图 才改了代码 改了字符串

你们没有关注假阳性 反而关注细枝末节
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
我不知道越界的话

这种高质量 while 循环都写不出来
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
这个是合法的 char s2[strlen(s)+1]

不合法的话 你用数组长度+1 的 size 用 malloc 返回指针都不合法
248 天前
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@geelaw
是 gcc 编译器

你那段代码 不就是越界么 段错误

这贴的主题是 fsanitize 检查出假阳性 因为正确的数组长度比如 31 它也报错

我当然知道越界
1 ... 17  18  19  20  21  22  23  24  25  26 ... 67  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5287 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 06:20 · PVG 14:20 · LAX 23:20 · JFK 02:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.