外積ってこれでよかった?
#include <stdio.h>
struct Vector3D { double x,y,z; };
void vec(const struct Vector3D *in1, const struct Vector3D *in2, struct Vector3D *out) {
 out->x = in1->y*in2->z - in1->z*in2->y;
 out->y = in1->z*in2->x - in1->x*in2->z;
 out->z = in1->x*in2->y - in1->y*in2->x;
}
#define ISLEAD(c) ((c)>=0x81 && (c)<=0x9f)
#define ISTAIL(c) ((c)>=0xe0 && (c)<=0xfc)
size_t strlen_sjis(const unsigned char *string) {
 size_t len = 0;
 const unsigned char *ptr = string;
 while(*ptr){
  if (ISLEAD(*ptr) && ISTAIL(*(ptr+1))) ptr++;
  ptr++; len++;
 }
 return len;
}
int main() {
 const struct Vector3D a = { 0.1, -0.8, -1.3 };
 const struct Vector3D b = { 1.7, 2.2, -3.1 };
 struct Vector3D c;
 const char d[] = "...";
 vec(&a, &b, &c); printf("c = ( %f, %f, %f )\n", c.x, c.y, c.z);
 printf("%s = %u\n", d, strlen_sjis((unsigned char *)d));
 return 0;
}