c - 这个代码片段有什么问题

标签 c debugging memory-management compiler-errors

伙计们,这是memset() 的一个实现,但是我被告知代码中存在一个逻辑错误。你能帮我找到它吗?

我觉得应该将目标字符串的双指针传递给这个函数,这就像传递指针变量的地址而不是指针本身。

当我在 MS VC++ IDE 中执行代码时遇到“访问冲突”。

‘C’库函数memset的定义是

void *memset(char *s, char c, size_t n) 

Copy c to the first n characters of s. Return s.


void *memset(char *s, char c, size_t n)
{
  size_t i;
  for (i = 0; i < n; i++, s++)
  {
    *s = c;
  }
  return s;
}

最佳答案

这有几个问题。

void *memset(char *s, char c, size_t n)
{
  size_t i;
  for (i = 0; i < n; i++, s++)  /* incrementing s means you cannot return */
  {                             /* the original value */
    *s = c;                     /* consider using s[i] = c after not incr. s*/
  }
  return s;                     /* this should probably be a cast back to void */
}

关于c - 这个代码片段有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813941/

相关文章:

C for 循环遍历带指针的数组

c - *** 检测到 glibc *** ./a.out : free(): invalid pointer: 0x0804832a ***

c - fscanf 在我的代码中扫描了多少个字符?

Android 类转换异常 : android. view.ViewGroup$LayoutParams 无法转换为 android.widget.RelativeLayout$LayoutParams

c++ - 编辑并继续生成幻像错误

javascript - 在 Chrome 控制台中加载外部库

我可以将未对齐的大小传递给 _mm_malloc 吗?

c - Z1 motes - 基站和传感节点之间的通信

c++ - 静态分配的内存在其范围结束后会发生什么?

c - C中当前进程的内存使用情况